Search code examples
carrayssizeof

Why am I getting 8 always?


char *c = (char *)malloc(30*sizeof(char));
printf("%lu \n",sizeof(c));

In the above code I am trying to print the size of 'c'. No matter what number I give instead of '30' in the code, I get the sizeof(c) as 8.

What is the problem? How can I determine the size of an array?

Is length and size the same for an array?


Solution

  • At the moment you are asking for the size of a pointer which on a 64 bits machine is 8 bytes. Since this is a malloc and not a real array, you can't retrieve the size of the buffer allocated through c.

    If c was declared as

    char c[30];
    

    You could determine size with

    size_t size = sizeof(c)/sizeof(c[0])
    

    But to be honest if I had to do that, I would just #define the array size even though the size calculation would be stripped out at compilation. It makes the code clearer in my opinion.