while循环在分配char'\ 0'时不起作用

时间:2017-07-10 19:33:11

标签: c++ arrays while-loop

我已经尝试过这个程序,但它没有用,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位。

1 个答案:

答案 0 :(得分:7)

你要chars请求10 new,然后尝试用while(*c)来检查这些字符,但是因为你从来没有初始化这个内存块,所以你已经有了未定义的行为当你通过*c取消引用它时。

为了解释这种情况,你很有可能在调试模式下运行它,在这种情况下,new返回的所有内容都很有可能被清零(#1}}调试器想要很好),这意味着你的while循环将立即终止。改为使用for循环或显式循环直到某个数字。