Is using %zu correct syntax in a printf format string as shown in some C code found on Wikipedia?

Yes that syntax is correct (at least for C99). Looks like your compiler isn't set up to handle it though. Just take out the z and you'll probably be fine. To be correct, make sure your printf format specifiers match the size of the types. Turning on all the warnings your compiler will give you probably helps out in that respect.

Your quotation:

The z prefix should be used to print it, because the actual size can differ on each architecture

is referring to the fact that size_t (which is the type returned by the sizeof operator) can vary from architecture to architecture. The z is intended to make your code more portable. However, if your compiler doesn't support it, that's not going to work out. Just fiddle with combinations of %u, %lu, etc. until you get the output making sense.


The z length modifier was added to C in the C99 standard; you might have a compiler that doesn't support C99.

If your C compiler doesn't support that, you can probably treat the sizes as unsigned long:

printf("%lu,%lu", (unsigned long)sizeof c, (unsigned long)sizeof(int));

Yes, but it only works on C99-compliant compilers. From wikipedia:

z: For integer types, causes printf to expect a size_t sized integer argument.

Tags:

C

Printf

Sizeof