Home > Software design >  Difference between %zu and %lu in C
Difference between %zu and %lu in C

Time:07-30

What is the difference between %zu and %lu in string formatting in C? %lu is used for unsigned long values and %zu is used for size_t values, but in practice, size_t is just an unsigned long. CppCheck complains about it, but both work for both types in my experience.

Is %zu just a standardized way of formatting size_t because size_t is commonly used, or is there more to it?

CodePudding user response:

but in practice, size_t is just an unsigned long

Not necessarily. There are systems with a 32 bit long and a 64 bit size_t. MSVC is one of them.

Given the following:

printf("long: %zu\n", sizeof(long));
printf("long long: %zu\n", sizeof(long long));
printf("size_t: %zu\n", sizeof(size_t));

Compiling under MSVC 2015 in x86 mode outputs:

long: 4
long long: 8
size_t: 4

While compiling in x64 mode outputs:

long: 4
long long: 8
size_t: 8

Having a separate size modifier for size_t ensures you're using the correct size.

  • Related