Почему данные json содержат дополнительные символы - PullRequest
0 голосов
/ 23 мая 2019

В приведенном ниже коде, когда «данные» печатаются с:

Display_printf(display, 0, 0, "score received: %.*s\n", ret, data);

, данные json печатаются правильно:

{"zip":97306,"score":130}

Однако, когда я делаю это:

Display_printf(display, 0, 0, "score received: %s\n", data);

данные json содержат дополнительные символы (иногда странные / неизвестные символы), например:

{"zip":97306,"score":130}R

Почему второй метод печати показывает дополнительные символы, тогда как первый не показывает 'т?Как я могу это исправить, чтобы второй метод печати работал?Каков эквивалентный код для выполнения «%. * S», чтобы данные могли хранить правильные данные json?


do
{
    ret = HTTPClient_readResponseBody(httpClientHandle, data, sizeof(data),
                                      &moreDataFlag);
    if(ret < 0)
    {
        printError("httpTask: response body processing failed", ret);
    }
    Display_printf(display, 0, 0, "%.*s \r\n",ret,data);
    len += ret;
}
while(moreDataFlag);

Ответы [ 2 ]

3 голосов
/ 23 мая 2019

My предположим, , что данные, которые вы получаете HTTPClient_readResponseBody, не являются строкой с нулевым символом в конце байтовой строкой .

Когда вы используете

Display_printf(display, 0, 0, "%.*s \r\n",ret,data);

вы указываете длину строки с аргументом ret, поэтому форматирование printf не напечатает ничего после указанной длины.

При использовании обычного "%s" форматирование printf попытается найти конец строки, найдя завершающий нулевой символ '\0'.

Либо оставьте свой текущий метод с "%.*s" и передав длину; Или передайте sizeof(data) - 1 в качестве максимальной длины для получения и явно добавьте нулевой терминатор в правильной позиции (data[ret]).

0 голосов
/ 23 мая 2019

Исходя из сказанного программистом @Some, я использовал другой массив символов для подстроки «data» размером «len». Это позволяет добиться того, чего я хотел, и теперь в нем нет лишних символов.

// Substring from 0 to len of data (removes extra characters)
char json[len+1];
int c = 0;
for(; c<len; c++) {
    json[c] = data[c];
}
json[c] = '\0';

Display_printf(display, 0, 0, "json received: %s\n", json);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...