比较来自 AdafruitIO_Data 对象的字符串

Comparing strings from AdafruitIO_Data object

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

我的函数如下所示:

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

打印时,data->value() 打印出我期望的结果,但是当我像这样比较它时 data->value() == "OPEN" 它不起作用。执行此操作的正确方法是什么,为什么上面的方法不起作用?

我已尝试按照 How do I properly compare strings?

的建议使用 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*)'

打印时不是布尔值。在我的示例中,它打印:received <- OPEN

When printed, data->value() prints what I expect it to, but when I compare it like this data->value() == "OPEN" it doesn't work. What is the right way to do this, and why isn't the above working?

strcmp 接受两个参数,都是 char *(指向 char 的指针),您为其提供一个布尔表达式,该表达式归结为 bool

可以找到 strcmp 的参考 here

假设 AdafruitIO_Data 定义为 here 并且您已经包含 string.h

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