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

Your program input

The output of the program