I want to print out a variable of type size_t
in C but it appears that size_t
is aliased to different variable types on different architectures. For example, on one machine (64-bit) the following code does not throw any warnings:
size_t size = 1; printf("the size is %ld", size);
but on my other machine (32-bit) the above code produces the following warning message:
warning: format '%ld' expects type 'long int *', but argument 3 has type 'size_t *'
I suspect this is due to the difference in pointer size, so that on my 64-bit machine size_t
is aliased to a long int
("%ld"
), whereas on my 32-bit machine size_t
is aliased to another type.
Is there a format specifier specifically for size_t
?
The correct way to print size_t variables is use of “%zu”. In “%zu” format, z is a length modifier and u stand for unsigned type.
Yes: use the z
length modifier:
size_t size = sizeof(char); printf("the size is %zu\n", size); // decimal size_t ("u" for unsigned) printf("the size is %zx\n", size); // hex size_t
The other length modifiers that are available are hh
(for char
), h
(for short
), l
(for long
), ll
(for long long
), j
(for intmax_t
), t
(for ptrdiff_t
), and L
(for long double
). See §7.19.6.1 (7) of the C99 standard.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With