I tried to use sizeof to get the size of an object, but it returned zero!

Previous The C Language Next

Q: When I tried to use the sizeof operator to determine the exact size of some objects, I got zero as the result. What is wrong?
A: You probably tried something like
printf ("%d", sizeof (something));
The ANSI standard proposes that the sizeof operator returns a value of type size_t, which is in fact long integer in this implementation. So, the result is pushed on the stack as a long integer, but the format specifier "%d" expects an ordinary integer, so it pulls from the stack just one word, which is zero in this case. You need to write
printf ("%ld", sizeof (something));
Alternatively, you can use a typecast to convert the result to a short integer
printf ("%d", (short) sizeof (something));
assuming that no object would be longer that 32767 bytes.