Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Platform independent size_t Format specifiers in c?

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?

like image 644
Ethan Heilman Avatar asked Jan 24 '10 03:01

Ethan Heilman


People also ask

What is the format specifier for Size_t in C?

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.


1 Answers

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.

like image 125
Adam Rosenfield Avatar answered Sep 19 '22 03:09

Adam Rosenfield