We are using C89 on an embedded platform. I attempted to print out a size_t
, but it did not work:
#include <stdio.h>
int main(void) {
size_t n = 123;
printf("%zu\n",n);
return 0;
}
Instead of 123
, I got zu
.
Other specifiers work correctly.
If size_t
exists shouldn't zu
also be available in printf
?
Is this something I should contact my library vendor about, or is a library implementation allowed to exclude it?
If size_t exists shouldn't zu also be available in printf?
size_t
existed at least since C89 but the respective format specifier %zu
(specifically the length modifier z
) was added to the standard only since C99.
So, if you can't use C99 (or C11) and had to print size_t
in C89, you just have to fallback to other existing types, such as:
printf("%lu\n", (unsigned long)n);