Ответ 1
Функция sizeof возвращает тип size_t
. Попробуйте использовать %zu
как спецификатор преобразования вместо %d
.
printf("The size of integer is %zu\n", sizeof(n));
Чтобы уточнить, используйте %zu
, если ваш компилятор поддерживает C99; в противном случае, или если вы хотите максимальной переносимости, лучший способ распечатать значение size_t
- это преобразовать его
на unsigned long
и используйте %lu
.
printf("The size of integer is %lu\n", (unsigned long)sizeof(n));
Причиной этого является то, что size_t
гарантируется стандартом как неподписанный тип; однако стандарт не указывает, что он должен иметь какой-либо конкретный размер (достаточно большой, чтобы представлять размер любого объекта). Фактически, если unsigned long не может представлять самый большой объект для вашей среды, вам может понадобиться использовать беззнаковый длинный листинг и спецификатор %llu
.
В C99 был добавлен модификатор длины z, чтобы указать способ, чтобы напечатанное значение представляло собой размер типа size_t. Используя %zu
, вы указываете, что напечатанное значение представляет собой значение без знака size_t
.
Это одна из тех вещей, где кажется, что вам не нужно думать об этом, но вы это делаете.
Дальнейшее чтение: