我在比较字符串时遇到问题。
我从mqtt收到了许多消息,我想存储每个主题(键)的最新值
我已经展示了素描的相关部分。
#define MAX_SENSORS 6
//主题和值表
char sensor_data[MAX_SENSORS][2][20];
初始化表格
void init() {
....
for (int i=0;i<MAX_SENSORS;i++) // initialize table
{
strcpy(sensor_data[i][0],"?");
strcpy(sensor_data[i][1],"");
}
}
在这里收到消息
void callback(char* topic, byte* b_payload, unsigned int length) {
// Convert byte* b_payload to string
for (int i = 0; i < length; i++) {
payload[i]=(char)b_payload[i];
};
payload[length]='\0';
for (int i = 0; i < MAX_SENSORS; i++)
{
为什么(完全调试)不起作用?
if (sensor_data[i][0]=="?") {
Serial.print("*");
}
原始
if (sensor_data[i][0]==topic) { // Slot matching topic found
strcpy(sensor_data[i][1],payload);
Serial.printf(" Slot %d",i);
break;
} else if (sensor_data[i][0]=="?") { // Empty slot found, store topic here
strcpy(sensor_data[i][0],topic);
strcpy(sensor_data[i][1],payload);
Serial.printf(" New %d",i);
break;
}
}
Serial.println();
}
这可能是因为我对字符串和char数组感到困惑吗?
修改 作业
strcpy(sensor_data[i][0],topic);
strcpy(sensor_data[i][1],payload);
似乎要分配
concat(topic,payload) to sensor_data[i][0].
答案 0 :(得分:1)
这可能都是因为我对字符串和 字符数组?
似乎喜欢它。 C字符串(char *和char [])无法与==
相比,而arduino的String
类却可以。要么将比较的左侧转换为String
,要么使用strcmp
来比较字符串。
if (String(sensor_data[i][0])=="?") {
if (strcmp(sensor_data[i][0], "?") == 0) {