我已经尝试过这个程序,但它没有用,IMO它应该在阵列的每个位置存储 q ,但为什么不发生呢?
`
int main()
{
char *c=new char[10];
char *p=c+9;
*p='\0'; //This should've assigned the last value to null terminator
int i=0;
p=c;
while(*c)
{
i++;
*c='q';
cout<<*c<<endl;
++c;
}
cout<<i<<endl<<*p<<endl;
return 0;
}
这真的超出了我,请帮忙。为什么这个循环没有循环10次?因为'\ 0'位于第10位。
答案 0 :(得分:7)
你要chars
请求10 new
,然后尝试用while(*c)
来检查这些字符,但是因为你从来没有初始化这个内存块,所以你已经有了未定义的行为当你通过*c
取消引用它时。
为了解释这种情况,你很有可能在调试模式下运行它,在这种情况下,new
返回的所有内容都很有可能被清零(#1}}调试器想要很好),这意味着你的while
循环将立即终止。改为使用for
循环或显式循环直到某个数字。