Petrus K.
Petrus K.

Reputation: 840

problems understanding the size_t type and the sizeof operator

void sizeof_test2();

void sizeof_test2()
{
    int array[5];
    size_t arr_size = sizeof(array);

    printf( "sizeof:\n"
            "array = %d\n"
            "arr_size = %d\n", sizeof(array), sizeof(arr_size));
}

GCC compiler output:

sizeof_test2.c: In function `sizeof_test2':  
sizeof_test2.c:6: error: `size_t' undeclared (first use in this function)  
sizeof_test2.c:6: error: (Each undeclared identifier is<br>
reported only once sizeof_test2.c:6: error: for each function it<br>
appears in.) sizeof_test2.c:6: error: parse error before "arr_size"<br>
sizeof_test2.c:10: error: `arr_size' undeclared (first use in this<br>
function) make[2]:  [build/Debug/Cygwin-Windows/sizeof_test2.o]<br>
Error 1 make[1]:  [.build-conf] Error 2<br>  

Don't know why I'm getting this error, what's the correct way of displaying a size_t type through printf?

Upvotes: 2

Views: 4569

Answers (3)

Mike
Mike

Reputation: 49433

stdlib is what you want, and for displaying it I think you're looking for the %z modifier

#include <stdlib.h>

size_t arr_size;
printf("%zu\n", arr_size);  // unsigned decimal 
printf("%zx\n", arr_size);  // hex 

Upvotes: 4

Rost
Rost

Reputation: 9089

size_t is not built-in type in C. You must include <stddef.h> or <stdlib.h> standard header where size_t is defined.

Upvotes: 1

ouah
ouah

Reputation: 145869

size_t type is defined in stddef.h header (and other headers, for example stdio.h).

Note that in your program your are using printf function so you already have to include stdio.h.

Upvotes: 7

Related Questions