Я хочу распечатать переменную типа size_t
в C, но это появляется это size_t
искажается к различным типам переменных на различной архитектуре. Например, на одной машине (64-разрядной), следующий код не бросает предупреждений:
size_t size = 1;
printf("the size is %ld", size);
но на моей другой машине (32-разрядной), вышеупомянутый код производит следующее предупреждающее сообщение:
предупреждение: формат '%ld' ожидает тип 'длинное целое *', но аргумент 3 имеет тип 'size_t *'
Я подозреваю, что это происходит из-за разницы в размерах указателя, так, чтобы на моей 64-разрядной машине size_t
искажается к a long int
("%ld"
), тогда как на моей 32-разрядной машине size_t
искажается к другому типу.
Есть ли спецификатор формата специально для size_t
?
Да: используйте модификатор длины z
:
size_t size = sizeof(char);
printf("the size is %zu\n", size); // decimal size_t ("u" for unsigned)
printf("the size is %zx\n", size); // hex size_t
Другие доступные модификаторы длины: hh
(для char
), h
(для short
), l
(для long
), ll
(для long
), j
(для intmax_t
), t
(для ptrdiff_t
) и L
(для long double
). См. §7.19.6.1 (7) стандарта С99.