2013-02-27 74 views
1

我相信Array1和Array2被声明不同,但它们都具有相同的类型 - char。 Array1和Array2似乎都包含相同的确切值和相同数量的值。我不明白为什么他们的长度彼此不同。有人可以解释为什么吗?C++比较两个相似阵列的长度

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”。 – sgarizvi 2013-02-27 11:51:47

+0

/脸掌我不能相信我忘了! @ sgar91那么,这就解释了一切。 – CLearner 2013-02-27 11:52:49

+0

@PlasmaHH如果他不问NT是什么可能会重复吗? =) – kassak 2013-02-27 11:53:25

回答

5

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

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

任何必要的级联之后,在转换阶段7(2.2),“\ 0'被附加到每个字符串文字因此 扫描字符串的程序可以找到它的结尾。

+0

不能相信我已经忘记了空终止字符。谢谢。 +1 – CLearner 2013-02-27 11:56:17

+0

我会在7分钟内接受此答案。 – CLearner 2013-02-27 11:58:00

2

由于串的NULL-treminated。在字符串'0'处有多余字符

+0

这就对了,谢谢。 +1 – CLearner 2013-02-27 11:56:56