strcmp / char *转换无法正常工作

时间:2018-09-10 21:02:32

标签: c++ arduino

我已经编写了MQTT客户端回调函数,并且我的代码从不调用handleEmptyJsonMessage()。在我看来(char*)转换或strcmp函数不能按我期望的那样工作。

如何将byte *payload与字符串/ char[]进行比较?

void mqttCallback(char *topic, byte *payload, unsigned int length)
{
    if (strcmp((char*)payload, "{}") == 0) {
      handleEmptyJsonMessage();
    } else {
      Serial.println("skip message");
    }
}

1 个答案:

答案 0 :(得分:2)

payload字符终止的意义上,您的\0缓冲区可能不是字符串。

更好地使用

    strncmp((char*)payload, "{}",length) == 0)

请注意,对payload内容的正确处理取决于问题中未描述的语义。例如。需要保证length不超过payload缓冲区;如果payload的字符串长于"{}",请决定是否要将该字符串视为相等。

无论如何,strxxx函数需要一个以\0结尾的字符串;否则很有可能产生不确定的行为。