Требуется ли спецификатор %zu для printf?
мы используем C89 на встроенной платформе. Я попытался распечатать size_t
, но это не сработало:
#include <stdio.h>
int main(void) {
size_t n = 123;
printf("%zun",n);
return 0;
}
вместо 123
, Я zu
.
Другие спецификаторы работают правильно.
если Не стоит zu
С printf
?
Это то, о чем я должен связаться с поставщиком библиотеки, или реализация библиотеки может исключить его?
2 ответов
если size_t существует, не должен ли zu также быть доступен в printf?
size_t
существовал, по крайней мере, с C89, но соответствующий спецификатор формата %zu
(в частности, модификатор длины z
) был добавлен в стандарт только с C99.
Итак, если вы не можете использовать C99 (или C11) и должны были напечатать size_t
в C89 вам просто нужно вернуться к другим существующим типам, таким как:
printf("%lu\n", (unsigned long)n);
Это работает нормально. В моей системе он печатает ожидаемое значение. Возможно, вы получаете ошибку из-за компилятора. Я использую GCC компилятора. Если у вас есть только это и попытка получить вывод, первое обновление GCC, а затем попробуйте. Это сработает.