【发布时间】:2019-01-26 22:16:21
【问题描述】:
我在比较字符串时遇到问题。
我从mqtt收到了一些消息,我想为每个主题(key)存储最新的值
我已经展示了我草图的相关部分。
#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();
}
这一切可能源于我对字符串和字符数组感到困惑?
编辑 任务
strcpy(sensor_data[i][0],topic);
strcpy(sensor_data[i][1],payload);
似乎分配了
concat(topic,payload) to sensor_data[i][0].
【问题讨论】:
-
您可以检查字符是否为'?',使用字符文字:
sensor_data[i][0][0]=='?',但稍后可能会有一些非'\0'字符。并检查它是否为空字符串,您可以if ( sensor_data[i][0][0]=='\0' ) {} -
topic是否超过 19 个字符? -
该死,你是对的。