为什么不打印char数组的未初始化索引?

时间:2014-05-14 17:07:16

标签: c++ arrays string char

为什么char数组的其余部分没有打印出来?给出以下代码:

char charArray[10];     
charArray[0] = 'a';
charArray[1] = 'b';
charArray[2] = 'c';
charArray[3] = 'd';

string str1 = charArray + string("string") ;
cout << str1;

输出:abcdstring

虽然这个:

char charArray[10];     
charArray[0] = 'a';
charArray[1] = 'b';
charArray[2] = 'c';

string str1 = charArray + string("string") ;
cout << str1;

输出:abcstring

据我所知,其余数组索引中的值是单位化的,但仍然存在值。所以我期待随机字符显示在那里,但是我没有看到任何表示未初始化值的奇怪字符。

那么,为什么char阵列的其余部分都不打印出来? (更多关于更多核心内容的更深入的答案是受欢迎的,并且非常感谢我希望将我的C ++知识扩展到专家的知识。)

1 个答案:

答案 0 :(得分:3)

纯粹的运气。

当您使用字符数组时,

string str1 = charArray + string("string")

数组被解释为C风格的字符串。

C样式字符串以零字符值终止。在你的情况下,第一个未初始化的数组元素(即第一个实验中的charArray[4])恰好是纯粹的运气(假设这是一个本地数组)。 charArray[4]中的偶然零值作为字符串的零终结符,因此您的charArray恰好代表有效的C字符串"abcd"。这正是你所看到的。

同样的事情发生在第二个实验中。