# include <stdio.h>
int main()
{
int a = sizeof("string");
printf("%d", a );
return 0;
}
上面的代码打印7作为输出,而字符串的长度只有6.有人可以解释一下吗?
答案 0 :(得分:8)
这就是发生的事情:
"string"
是(const
)char的数组,包括空终止符,即{'s', 't', 'r', 'i', 'n', 'g', '\0'}
。在您的示例中,所述数组有7个元素。sizeof
会产生大小(以字节为单位)。 char
的大小为1。因此,您可以在文字中明确显示字符数,加上空终止符。
C和C ++中的行为相同
答案 1 :(得分:3)
c中的所有字符串,甚至是您编写的"string"
字符串都以空字节'\0'
终止。
c或c ++代码中的表达式"string"
被视为字符串文字,这意味着char数组如下所示:{'s','t','r','i','n','g','\0'}
。在c和c ++中,所有字符串必须由内存中的空字节终止,否则函数无法识别它们的结尾。
顺便说一句,这也是为什么在计算c代码中的字符数组长度时必须添加1个字符以解释空字节的原因。因此,如果要将"string"
存储在您声明的字符数组中,则必须使用6 char array[7];
这将导致未定义的行为。
答案 2 :(得分:2)
当我们在“”中指定字符串时,字符串的长度为6,并且默认情况下也会添加空字符。所以它打印7。
答案 3 :(得分:2)
字符串以空值终止并存储为包含字符的数组,并以空字符('\0'
结尾,在ASCII中称为NUL)。所以你有:
s | t | r | i | n | g | \0 |
^-- 7th char
答案 4 :(得分:1)
因为"string"
隐含地添加了'\0'
字符。