#include<iostream>
using namespace std;
int main()
{
char a[]="robert";
cin>>a;
cout<<a;
}
因此,a的大小现在固定为7位直观。现在,如果我读到的东西是&#34; qwertyuiop&#34;进入&#39; a&#39;它大于7位,预计会出现溢出。但是没有发生这种情况,它会正常打印输出。这里发生了什么?
答案 0 :(得分:1)
写出边界是未定义的行为。
在这种情况下看起来不错,但如果...
会发生什么#include<iostream>
using namespace std;
int main()
{
char a[5];
char b[7];
cin >> a;
cin >> b;
cout << a << endl;
}
输入:
金刚
monkeyhunter
输出:
kingkmonkeyhunter
他们混在一起!
你应该小心C ++中的数组,如果你试图写出界限,它可能没有可见的效果。
答案 1 :(得分:0)
操作系统(在处理器的帮助下)定义了允许应用程序读/写的内存区域。当您在外面阅读预期内容时,处理器会触发操作系统捕获的硬件异常,这会触发您的应用程序终止。
但是,在数组外部读取不一定在应用程序的边界之外读取(例如,您可以写入/读取自己代码的另一个变量)。例如,在内存区域的末尾,您通常以相反的顺序拥有程序堆栈。
C ++将数组范围之外的读/写指定为未定义行为。在这种情况下,它可能会以“随机”的方式崩溃或不崩溃。