c++ - 程序选择 '\0',即使它没有被提及——澄清

标签 c++ arrays

所以,我可以预测这个程序会做什么:

int main()
{
   char d[] = {'h','e','l','l','o'};
   const char *c = d;
   std::cout << *c << std::endl;
   while ( *c ) {
      c = c + 1;
      std::cout << *c << std::endl;
      if ( *c == '\0' )
         std::cout << "Yes" << std::endl;
   }
   return 0;
}

根据我的理解,代码不应该打印 Yes,因为字符数组 d[] 中没有 \0,所以这是这个程序正在挑选的垃圾值吗?我做空这段时间应该无限次运行。是吗?

最佳答案

这个问题的正确答案是程序表现出未定义的行为,因为它超出了数组的末尾。

将程序更改为使用字符串文字进行初始化会将行为更改为“始终打印 "Yes":

char d[] = "hello";

I short this while should run infinite times.

一旦未定义的行为发生,所有的赌注都会被取消。然而,程序通常设法在 d[] 之外的内存中找到一个零字节,此时它会打印 “Yes”,然后退出循环。

关于c++ - 程序选择 '\0',即使它没有被提及——澄清,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45019224/

相关文章:

c++ - 将变量移动到头文件时出现运行时错误

c - 将指针传递给二维数组作为参数

arrays - 如何在 VBA 中一次为数组的某些元素分配相同的值?

javascript - 从混合字符数组中仅检索整数值

javascript - 无法在 JavaScript 中循环数组

c++ - Qt - 在 Windows 上按下 Alt 后防止菜单栏获取焦点

c++ - 继承reverse_iterator中用户自定义迭代器的所有函数

c++ - CGAL 2.5D 三角测量附加顶点信息

c++ - Solaris 上的空核心文件

javascript - JS中如何使用findIndex()查找所选项目的索引?