Ошибка строки формата Printf (PW.BAD_PRINTF_FORMAT_STRING) - PullRequest
0 голосов
/ 12 апреля 2019
sprintf(xBuffer,"%l",rootCause)

rootCause - это unsigned long

bad_printf_format_string: недопустимое преобразование строки формата

sprintf(buffId,"Ox%lx Ox%lx Ox%lx", canSnifferMsg.nodeId, canSnifferMsg.index, canSnifferMsg.subindex);

что по этому поводу? nodeId, index, subindex все long с

1 Ответ

2 голосов
/ 12 апреля 2019

Правильная строка формата для длинных без знака: %lu.
Список спецификаторов формата можно найти здесь .
Аналогичный вопрос был задан здесь .

%lx используется для получения шестнадцатеричного представления числа.Поэтому не имеет значения, если он не подписан или подписан, поскольку вместо отрицательного знака используется дополнение 2 *.

Если вы хотите напечатать обычное длинное число, вы можете использовать либо %ld, либо %li, как указанопо первой ссылке, которую я отправил.

Пример:

unsigned long a = (unsigned long)(-25);
char buff[100];

sprintf(buff, "%lu %lx %ld", a, a, a);

printf("%s", buff);

Вывод:

4294967271 ffffffe7 -25

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