为什么sizeof在C中返回相同字符串的不同值?

时间:2012-03-10 05:49:36

标签: c string unix sizeof

  

可能重复:
  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));

有人可以解释原因吗?

3 个答案:

答案 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个字节的指针: - )