【发布时间】:2017-03-27 11:59:26
【问题描述】:
#include<iostream>
using namespace std;
int main()
{
char a[]="robert";
cin>>a;
cout<<a;
}
因此,a 的大小现在固定为 7 位,这很直观。现在,如果我将“qwertyuiop”之类的内容读入大于 7 位的“a”中,则预计会显示溢出。然而,没有这样的事情发生,它正常打印输出。这是怎么回事?
【问题讨论】:
-
没有
a的大小是七个字节。而且 C++ 没有边界检查。越界写入会导致未定义的行为。故事结束,真的。 -
@Someprogrammerdude
char a[]不是用参数的大小定义一个数组吗? -
@Alex 字符串中的六个字母,加上终止符。一个由七个字符组成的数组。
-
@Someprogrammerdude 你是完全正确的。我的问题是
char a[]="robert"和char a[]="robert barateon"之间是否有区别?这是否意味着a将具有适当字符串的大小? -
将更多的数据写入数组而不是它可以容纳的数据会导致 UNDEFINED 行为。一种可能的表现是程序崩溃。另一种可能的表现是没有任何可观察到的症状。在适当的硬件支持下,该程序甚至可以电死程序员 - 因此通过幸存的程序员增加对未定义行为的真正含义的平均理解。
标签: c++