我似乎无法比较我认为是字符串的东西。
我的功能如下:
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*)'
答案 0 :(得分:3)
打印时,data-> value()会打印我期望的内容,但是当我打印时 像这样比较它data-> value()==“ OPEN”它不起作用。什么是 正确的方法,为什么上面的方法行不通?
strcmp接受两个参数,它们都是char *(指向char的指针),您为其提供了一个布尔表达式,可以归结为布尔值
有关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!");
}
}