【问题标题】:While loop not functioning on assigning char '\0'While 循环在分配 char '\0' 时不起作用
【发布时间】:2017-12-14 16:05:09
【问题描述】:

我试过这个程序,但它不起作用,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(代表 i),然后除了换行符之外什么都没有。
  • 看看while(*c) 做了什么。你的意思可能是while(i&lt;9)
  • @MarekVitek 不,效果很好,试试这个然后你会发现: char *c ="hello"; while(*c){ \\做一些事情 ++c; }
  • 如果你想看看发生了什么,那么就在它声明之后在调试器中查看c。或者只是尝试打印出来。仅仅因为您在末尾使用*p='\0'; 设置了空终止符,并不意味着它不能在其他任何地方。事实上,您可以让数组/字符串充满空终止符。有时它被用作缩短字符串的快速方法。只需将\0 放在新的结尾处即可。

标签: c++ arrays while-loop


【解决方案1】:

您通过new 请求 10 个 chars,然后您尝试使用 while(*c) 遍历这些字符,但由于您从未初始化此内存块,因此当您通过 @ 取消引用它时,首先您已经有未定义的行为987654324@。

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

【讨论】:

  • 永远不要让我们失望。
  • 即这是未定义的行为(可能值得一提)。
  • @Rick 你能解释一下什么调试模式和什么是零内存吗?
  • @BenSteffan 谢谢,已添加。
  • @infinite 你通常有调试和发布模式,发布模式有优化,无助于删除错误,调试完全相反。清零内存是memset 全为零的内存。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-01
  • 2015-03-09
  • 2023-03-22
相关资源
最近更新 更多