以下cpp程序的输出如何合理

问题描述 投票:0回答:1
char a[4];
cin >> a;
char b[3];
cin >> b;
cout << a << "\n";
cout << b;

输入:印度封锁给我输出:kdown锁定

同时对char数组进行硬编码时>]

char a[]= "india"
char b[]= "winner"
cout << a <<" " << b;

给我预期的结果您能解释一下意外结果的原因吗?谢谢

字符a [4]; cin >> a;字符b [3]; cin >> b; cout << a <

您观察到的是缓冲区溢出的一本书示例。用户输入不适合缓冲区,您会将垃圾写入堆栈中的其他一些变量。 C ++标准说这是UB(未定义的行为),因此可能会发生很多事情。

在第二个示例中,将自动选择数组的大小以适合字符串(包括空字符终止符)。

c++ arrays output character cppcheck
1个回答
1
投票

您观察到的是缓冲区溢出的一本书示例。用户输入不适合缓冲区,您会将垃圾写入堆栈中的其他一些变量。 C ++标准说这是UB(未定义的行为),因此可能会发生很多事情。

© www.soinside.com 2019 - 2024. All rights reserved.