比较字符串时遇到问题(arduino)

时间:2019-01-26 22:16:21

标签: c++ string arduino

我在比较字符串时遇到问题。

我从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].

1 个答案:

答案 0 :(得分:1)

  

这可能都是因为我对字符串和   字符数组?

似乎喜欢它。 C字符串(char *和char [])无法与==相比,而arduino的String类却可以。要么将比较的左侧转换为String,要么使用strcmp来比较字符串。

if (String(sensor_data[i][0])=="?") { 
if (strcmp(sensor_data[i][0], "?") == 0) {