Cout在遍历const char时给出垃圾输出

Jin*_*nzu -3 c++ arrays const-char

执行以下代码时,我得到了我期望的结果以及一些意外的输出:

#include <iostream>

using std::cout;
using std::endl;

int main()
{
    const  char ca[] = {'h', 'e', 'l', 'l', 'o'};
    const char *cp = ca;
    while (*cp)
    {
        cout << *cp << endl;
        ++cp;
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

h
e
l
l
o
?
?
m
Run Code Online (Sandbox Code Playgroud)

最后剩下的字符是什么?const char数组中是否有未说明的内容?

eer*_*ika 5

while (*cp)
Run Code Online (Sandbox Code Playgroud)

cp指向空字符时,此循环结束。

const  char ca[] = {'h', 'e', 'l', 'l', 'o'};
Run Code Online (Sandbox Code Playgroud)

该数组不包含空字符。

因此,循环遍历数组,并超出其范围。在数组边界之外访问数组的行为是不确定的。