可能重复:
Sizeof 字符串文字
在我的 windows7 mingw 环境中,我尝试了这个:
char str[] = "hello";
的值为sizeof(str)
6,而不是 4 或 8。
这怎么可能发生?
可能重复:
Sizeof 字符串文字
在我的 windows7 mingw 环境中,我尝试了这个:
char str[] = "hello";
的值为sizeof(str)
6,而不是 4 或 8。
这怎么可能发生?
sizeof(str)
返回包含终止空字符的字符串中的字节数。即,在您的数组"hello\0"
中占 6 个字节。
相反,如果你有
char* str = "hello";
thensizeof(str)
将返回指针 str
中的字节数(32 位系统为 4)。
您可能会发现这个 SO 问题Why does sizeof return different values for same string in C? 出于兴趣。
这是因为str
是一个数组chars
。sizeof(array)
将告诉您数组占用的字节数,并且由于str
是 的数组chars
,因此每个元素只有 1 个字节,包括空终止字符,共 6 个字节。
您可以使用: 获取数组中元素sizeof(array)/sizeof(array[0])
的数量,因此可以更明确地写成: sizeof(str)/sizeof(str[0])
,但如果str
是一个数组char
then 等效于 just sizeof(str)
。
请注意,这通常不适用于 C 字符串,对于字符串的长度,使用strlen
. 例如:
char *str = "hello";
sizeof(str); // returns 4, since str is declared as char*, not char[]
“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