为什么sizeof(指针)返回不正确的值?

时间:2012-08-12 02:57:00

标签: c string sizeof

  

可能重复:
  Sizeof string literal

在我的windows7 mingw环境中,我尝试了这个:

char str[] = "hello";

sizeof(str)的值为6,而不是4或8。

这怎么可能发生?

3 个答案:

答案 0 :(得分:3)

sizeof(str)返回字符串中包含终止空字符的字节数。即,"hello\0"数组中生成6个字节。

如果你有了

char* str = "hello";

然后sizeof(str)将返回指针 str中的字节数(对于32位系统为4)。

您可能会发现感兴趣的这个问题Why does sizeof return different values for same string in C?

答案 1 :(得分:2)

这是因为strchars的数组。 sizeof(array)将告诉您数组占用的字节数,并且str是一个chars数组,每个元素只有1个字节,包括空终止字符,6个字节

您可以使用以下代码获取数组中元素的数量:sizeof(array)/sizeof(array[0]),因此可以更明确地编写:sizeof(str)/sizeof(str[0]),但如果strchar的数组,那么这相当于sizeof(str)

请注意,此通常适用于C字符串,对于字符串的长度,请使用strlen。例如:

char *str = "hello";
sizeof(str);  // returns 4, since str is declared as char*, not char[]

答案 2 :(得分:2)

“sizeof()”运算符返回字节数。对于您的字符串,它恰好是6(5个字符加上空字节)。对于6个元素的整数数组,它是24(至少在我的32位Linux系统上)。对于指针,它将是4(同样,对于32位系统)。

#include <stdio.h>

int
main (int argc, char *argv[])
{
  char str[] = "Hello";
  char *s = "Hello";
  int a[] = {1, 2, 3, 4, 5, 6};
  printf ("sizeof (str)=%d, sizeof(s)=%d, sizseof(a)=%d\n",
    sizeof (str), sizeof(s), sizeof(a));
  return 0;
}

结果:

sizeof (str)=6, sizeof(s)=4, sizeof(a)=24