преобразование strcmp / char * не работает должным образом - PullRequest
0 голосов
/ 11 сентября 2018

Я написал функцию обратного вызова клиента 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 голосов
/ 11 сентября 2018

Вероятно, ваш payload -буфер не является строкой в ​​том смысле, что он заканчивается \0 -характером.

Лучше использовать

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

Обратите внимание, что правильныйобработка содержимого payload зависит от семантики, не описанной в вашем вопросе.Например, необходимо гарантировать, что length не превышает payload -буфера;если payload строка длиннее "{}", пожалуйста, решите, хотите ли вы считать это равным или нет.

В любом случае, для strxxx -функций требуется строка, оканчивающаяся на \0;в противном случае очень вероятно, что вы дадите неопределенное поведение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...