可能重复:
Sizeof doesn't return the true size of variable in C
C -> sizeof string is always 8
Sizeof打印出6:
printf("%d\n", sizeof("abcde"));
但它打印出4:
char* str = "abcde";
printf("%d\n", sizeof(str));
有人可以解释原因吗?
答案 0 :(得分:6)
字符串文字"abcde"
是一个字符数组。它长6个字节,包括空终止符。
类型char*
的变量是字符的指针。它的大小是指针的大小,在32位系统上是4个字节。 sizeof
是编译时操作†,因此它只查看变量的静态类型,在本例中为char*
。它不知道指向了什么。
†除了可变长度数组外,C99语言标准中引入了一项功能
答案 1 :(得分:2)
第一个例子,sizeof()
返回普通字符串的长度
第二个例子,sizeof()
返回指针的大小 - > 32位所以4个字节。
答案 2 :(得分:1)
因为这里
printf("%d\n", sizeof("abcde"));
是一个字符串,考虑NULL为6字节长。
和
char* str = "abcde";
printf("%d\n", sizeof(str));
是一个需要32位因此需要4个字节的指针: - )