比较来自 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!");
}
}
我似乎无法比较我认为是字符串的东西。
我的函数如下所示:
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!");
}
}