我相信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
答案 0 :(得分:5)
由于字符串文字中存在隐式的空终止字符,第二个数组有一个额外的字符。
从C ++ 11标准的 2.14.5字符串文字部分(草案n3337)第14点指出:
在任何必要的连接之后,在翻译阶段7(2.2)中,'\ 0'被附加到每个字符串文字,所以 扫描字符串的程序可以找到它的结束。
答案 1 :(得分:2)
因为字符串是NULL-treminated。你在字符串文字'\ 0'
上有额外的字符