char ch[] = {'h', 'e', 'l', 'l', 'o'};
char* p = ch;
while(*p){
std::cout << *p << std::endl;
++p;
}
这会打印数组+垃圾的元素,但是
int ch[] = {1, 2, 3, 4};
int* p = ch;
while(*p){
std::cout << *p << std::endl;
++p;
}
这只打印数组中没有垃圾的元素。
我只是c ++的初学者,我没有弄清楚这种行为背后的原因。
需要一些帮助。
答案 0 :(得分:3)
node_modules/**/*
coverage/**/*
public/js/lib/**/*
doc/**/*
plato/**/*
一直持续到达到0的值。在任何一种情况下,你都没有确定有一个0终止你的阵列,只是运气一个人工作,而另一个没有
答案 1 :(得分:0)
由于缺少定义的字符串结尾,您将继续迭代超出预期的字符数组,这将输出相邻内存中保存的数据。字符串通常在c / c ++中设置,以空字符(&#39; \ 0&#39;)终止,这允许数组迭代直到* p ==&#39; \ 0&#39;。
如果您向数组添加元素,请将最后一个元素设置为&#39; \ 0&#39;,并将while循环设置为运行直到* p ==&#39; \ 0&#39;,您应达到预期的效果。
这样可以防止循环超出预期范围,除了在功能上非常重要之外,这是一个很好的软件安全实践,因为输出额外的内存有时可以在应用程序中被利用。