strcmp/char* 转换无法按预期工作

strcmp/char* conversion not works as expected

本文关键字:工作 char 转换 strcmp      更新时间:2023-10-16

我写了一个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");
}
}

可能你的payload-buffer 不是字符串,因为它是由字符终止的。

更好地使用

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

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

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