执行以下代码时,我得到了我期望的结果以及一些意外的输出:
#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;
}
}
输出:
h
e
l
l
o
ⁿ
■
m
最后剩下的字符是什么? const char数组中有没有被忽略的东西?
答案 0 :(得分:5)
while (*cp)
当cp
指向空字符时,此循环结束。
const char ca[] = {'h', 'e', 'l', 'l', 'o'};
该数组不包含空字符。
因此,循环在数组上及其边界之外迭代。在数组边界之外访问数组的行为是不确定的。
答案 1 :(得分:2)
while
循环直到*cp
等于0。
此修复程序:
#include <iostream>
using std::cout;
using std::endl;
int main()
{
const char ca[] = { 'h', 'e', 'l', 'l', 'o', '\0' }; // <-- add '\0'
const char* cp = ca;
while (*cp) // loop until *cp equal '\0'
{
cout << *cp << endl;
++cp;
}
}
或者这个:
#include <iostream>
using std::cout;
using std::endl;
int main()
{
const char ca[] = { "hello" };
const char* cp = ca;
while (*cp)
{
cout << *cp << endl;
++cp;
}
}