C ++比较两个相似数组的长度

时间:2013-02-27 11:50:18

标签: c++

我相信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

2 个答案:

答案 0 :(得分:5)

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

从C ++ 11标准的 2.14.5字符串文字部分(草案n3337)第14点指出:

  

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

答案 1 :(得分:2)

因为字符串是NULL-treminated。你在字符串文字'\ 0'

上有额外的字符