1

我相信 Array1 和 Array2 的声明方式不同,但它们都具有相同的类型 - char。Array1 和 Array2 似乎都包含相同的确切值和相同数量的值。我不明白为什么它们的长度彼此不同。有人可以解释为什么吗?

char Array1[ ] = { 1, 2, 3, 4, 5 };
char Array2[ ] = "\x01\x02\x03\x04\x05";

std::cout << "Length of Array1 = " << sizeof( Array1 )/sizeof( *Array1 )
          << std::endl
          << "Length of Array2 = " << sizeof( Array2 )/sizeof( *Array2 );

输出:

Length of Array1 = 5
Length of Array2 = 6
4

2 回答 2

5

由于字符串文字中存在隐式空终止字符,第二个数组有一个额外的字符。

从C++11 标准(n3337 草案)第2.14.5 节字符串文字第 14 点开始:

在任何必要的连接之后,在翻译阶段 7 (2.2) 中,'\0' 被附加到每个字符串文字中,以便扫描字符串的程序可以找到它的结尾。

于 2013-02-27T11:52:20.427 回答
2

因为字符串以 NULL 结尾。您在字符串文字 '\0' 处有多余的字符

于 2013-02-27T11:51:47.593 回答