简体   繁体   中英

print const char array by the result of sizeof()

#include <stdio.h>
#include <stdlib.h>

int constChars(const char* str) {
    int size = sizeof(str)/sizeof(char);
    printf("Size is %d.\n", size);
    int i = 0;
    for (i=0;i<size;i++)
       printf("%c ", str[i]);

    return 0;
}


int main(void) {

    char a[10]={'b','c','d','e','f','f','f','f','f','f'};
    constChars(a);
    return 0;

}

I wrote piece of code like above, but the output result is: Size is 8. bcdeffff

I'm quite confused, why the sizeof() function gives a size of 8? I use gcc and freebsd.

When you pass an array to a function, it gets rewritten as a pointer, where sizeof information is lost. If you did this in main instead, ie:

char a[10]={'b','c','d','e','f','f','f','f','f','f'};
int size = sizeof(a)/sizeof(a[0]);
printf("Size is %d.\n", size);

It prints 10 as expected. But once you pass it to constChars , it prints the size of a pointer.

Str is a pointer to a char. That is typically 4 to 8 bytes. You are not getting the size of the array, but the size of the variable. The only way to know the length of the array is to pass the size in with it, or you could deliminate the array with some sort of signal value (like \\0) and do some iteration.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM