Независимые от платформы size_t Спецификаторы формата в c?

Я хочу распечатать переменную типа 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?

76
задан PJTraill 3 June 2016 в 17:41
поделиться

1 ответ

Да: используйте модификатор длины 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.

110
ответ дан 24 November 2019 в 11:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: