为什么sizeof(“string”)打印的长度超过“string”的长度?

时间:2015-10-27 06:54:52

标签: c++ c sizeof

# include <stdio.h>
int main()
{
        int a = sizeof("string");
        printf("%d", a );
        return 0;
}

上面的代码打印7作为输出,而字符串的长度只有6.有人可以解释一下吗?

5 个答案:

答案 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'字符。