Функция 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 не может представлять самый большой объект для вашей среды, вам может даже понадобиться использовать long unsigned long cast и спецификатор %llu
.
В C99 был добавлен модификатор длины z, чтобы обеспечить способ указать, что печатаемое значение является размером типа size_t. Используя %zu
, вы указываете, что печатаемое значение является значением без знака size_t
размера.
Это одна из тех вещей, когда кажется, что вам не нужно думать об этом, но вы делаете.
Дальнейшее чтение: