输出非空终止的字符数组行为?

0 c++

char sentence[] ={'k','k','k','k','k','k','k','k'}; // (8 character)
std::cout << sentence << std::endl;
Run Code Online (Sandbox Code Playgroud)

那么输出就是kkkkkkkk.

但是如果我们递减数组的字符(即前面的数组在少于 8 个字符之后有 8 个字符)

char sentence[] ={'k','k','k','k','k','k','k'}; // ( 7 character)
std::cout << sentence << std::endl;
Run Code Online (Sandbox Code Playgroud)

输出:

kkkkkkk`\363\277\357\376.
Run Code Online (Sandbox Code Playgroud)

eer*_*ika 5

操作数sentence衰减为指向数组第一个元素的指针。接受const char*参数的流插入运算符重载要求指针指向以 null 结尾的数组。如果违反该前提条件,则程序的行为是不确定的。

sentence不包含空终止符。您将其插入字符流中。程序的行为是未定义的。

然后只输出“kkkkkkkk”。

这是一种潜在的行为。无法保证此行为,因为程序的行为未定义。

但如果我们递减数组的长度,则输出 kkkkkkk`\363\277\357\376。

这是一种潜在的行为。无法保证此行为,因为程序的行为未定义。