比较来自AdafruitIO_Data对象的字符串

时间:2018-09-07 20:56:50

标签: arduino adafruit

我似乎无法比较我认为是字符串的东西。

我的功能如下:

var filteredList = listA.Select(o => new A 
                                     {
                                         id = o.id, 
                                         name = o.name, 
                                         games = o.games.Where(g => g.isActive)
                                     });

在打印时,void handleMessage(AdafruitIO_Data *data) { Serial.printf("\nreceived <- %s", data->value()); if (data->value() == "OPEN") { Serial.printf("\nIt worked!"); } } 会打印出我期望的样子,但是当我像这样data->value()进行比较时,它不起作用。正确的方法是什么,为什么上述方法不起作用?

我尝试按照How do I properly compare strings?的建议使用data->value() == "OPEN"

strcmp()

但是我得到了

void handleMessage(AdafruitIO_Data *data) {
  Serial.printf("\nreceived <- %s", data->value());
  if (strcmp(data->value() == "OPEN")) {
    Serial.printf("\nIt worked!");
  }
}

打印时不是布尔值。从我的示例中可以看到:FileName:48: error: cannot convert 'bool' to 'const char*' for argument '1' to 'int strcmp(const char*, const char*)'

1 个答案:

答案 0 :(得分:3)

  

打印时,data-> value()会打印我期望的内容,但是当我打印时   像这样比较它data-> value()==“ OPEN”它不起作用。什么是   正确的方法,为什么上面的方法行不通?

strcmp接受两个参数,它们都是char *(指向char的指针),您为其提供了一个布尔表达式,可以归结为布尔值

有关strcmp的信息,请参见here

假设AdafruitIO_Datahere的定义,并且您已经包含string.h

void handleMessage(AdafruitIO_Data *data) {
  Serial.printf("\nreceived <- %s", data->value());
  if (!strcmp(data->value(), "OPEN")) {
    Serial.printf("\nIt worked!");
  }
}