Требуется ли спецификатор %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, а затем попробуйте. Это сработает.

