предупреждение о том, что формат printf не подходит для переменной типа uint32_t - PullRequest
6 голосов
/ 23 июня 2011

Я только что узнал о C, и я знаю, что это основной вопрос, но я просто не могу понять, как я могу решить это.Например, у меня есть строка

printf("value :%d\n",var.value);

, формат не подходит, поскольку она показывает ошибку ниже

*, формат "% d" ожидает тип "int", но аргумент 3 имеетвведите 'uint32_t *'

Я уже проверил по этой ссылке cplusplus: cplusplus print ref

, но в нем явно не указано, как печатать значение с типомравен uint32_t * (аналогично uint16_t).

Любое объяснение будет очень оценено.

Ответы [ 2 ]

15 голосов
/ 23 июня 2011

Вы пытались напечатать указатель на uint32_t как int.Вы должны сделать две вещи:

  1. разыменовать указатель, чтобы вы могли напечатать uint32_t, а не указатель.
  2. используйте правильный спецификатор формата printtf

Правильный способ форматирования uint32_t - использовать макрос PRIu32, который расширяется до символа форматирования в виде строки.

То есть вы делаете

printf("%"PRIu32"\n", *var.value);

Возможно, вы находитесь на общей платформе, где unsigned int совпадает с uint32_t, и в этом случае вы можете просто сделать:

printf("%u\n", *var.value);

(обратите внимание,% u вместо кода, который использовал% d,% u для целого без знака, а% d для целого со знаком)

5 голосов
/ 23 июня 2011

Если вы хотите указатель, используйте %p,

printf("value :%p\n",var.value); 

Если вы хотите разыменованное значение unsigned int, используйте

printf("value :%u\n",*(var.value)); 

Предполагается, что поле value в var на самом деле является указателем на uint32_t - это то, что подразумевает ваш текст предупреждения.

Приятно, что вы получаете здесь предупреждение - printf не является типобезопасным, поэтому часто неправильное использование API просто приводит к внезапной неисправности во время выполнения (например, сбой или что-то еще, необнаруженное повреждение памяти).

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