首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >对非类类型“char[9]”的charArrayBuffer中的成员“compareTo”的请求

对非类类型“char[9]”的charArrayBuffer中的成员“compareTo”的请求
EN

Stack Overflow用户
提问于 2014-12-29 20:55:33
回答 2查看 607关注 0票数 0

这个想法是创建一个代码,将用serial.read读取的名称与预制的名称进行比较。

这两个声明都是char数组,长度为9,因此我不明白为什么会出现这个问题。

代码:

代码语言:javascript
运行
复制
char name1[9] = "Jesper";

char nameBuffer[9];

void setup()
{

      Serial.begin(9600);

}

void loop()
{

      int i = 0;

      nameBuffer[0] = 0;

      while(Serial.available() == 0)
        {
          // wait for data to be send
        }

        while(Serial.available() > 0)
        {   
          int inByte = Serial.read();
          delay(50);
          nameBuffer[i] = char(inByte);
          i++;
        }

      Serial.print("Searching for: "); 
      Serial.println(nameBuffer);

     if (nameBuffer.compareTo(name1) < 0 )
     {
       Serial.println("Did you mean to write: \"Jesper\"");
     }
     else
     {
       Serial.println("Jesper found");
     }  
    }

收到错误:

错误:请求'nameBuffer‘中的成员'compareTo’,该成员是非类类型'char9‘

EN

回答 2

Stack Overflow用户

发布于 2014-12-29 20:59:13

替换

代码语言:javascript
运行
复制
if (nameBuffer.compareTo(name1) < 0 )

使用

代码语言:javascript
运行
复制
if (strcmp(nameBuffer, name1) != 0 )

无法使用.运算符访问as nameBuffer

顺便说一句,根据错误信息,你正在用C++编程,而不是用C。

票数 0
EN

Stack Overflow用户

发布于 2014-12-29 20:59:16

试一试

代码语言:javascript
运行
复制
strncmp(nameBuffer, name1, sizeof nameBuffer) < 0

而不是

代码语言:javascript
运行
复制
nameBuffer.compareTo(name1) < 0

你的变量是char数组,而不是classE,所以它们没有方法。

我使用strncmp是因为我不能确定nameBuffername1是否正确地以null结尾,所以通过这种方式可以防止出现一些问题

既然您使用的是c++,那么您也可以尝试使用std::string,因为如果您声明了

代码语言:javascript
运行
复制
std::string nameBuffer;
std::string name1("Jasper");

然后,要附加char,您可以执行以下操作

代码语言:javascript
运行
复制
nameBuferr += static_cast<char>(inByte);

为了进行比较,只需

代码语言:javascript
运行
复制
if (nameBuffer < name1)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27689345

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档