我很震惊。在此程序中,如果输入为:
11110000
11110000
输出应为:
11110000
11110000
但我将其作为输出:
1110000
11110000
我的代码:
#include <iostream>
int main()
{
char a[8];
char b[8];
std::cin >> a;
std::cin >> b;
for (int i=0; i<8; i++) {
std::cout << a[i];
}
std::cout << "\n";
for (int j=0; j<8; j++) {
std::cout << b[j];
}
}
答案 0 :(得分:4)
问题是您的程序没有分配足够的内存来存储a
和b
输入:为了存储8个字符的文本,您需要分配9 char
s - 最后一个是C字符串的空终止符:
char a[9];
char b[9];
目前,由于缓冲区溢出,您的程序会出现未定义的行为,这很容易被黑客利用。
幸运的是,这个问题有一个非常简单的解决方法:用char
替换std::string
数组,让你的字符串改变最终用户输入大小的容量,防止缓冲区溢出:
std::string a;
std::string b;
您需要#include <string>
才能编译修改后的代码。
答案 1 :(得分:1)
char a[8];
char b[8];
cin>>a;
cin>>b;
如果您为a
输入的字符数超过7个,则会覆盖到b
,因为cin >> a;
会读取带有终止\0
的C样式字符串在末尾。设为char a[9]; char b[9];
,并假设输入中只有8个字符,它将正常工作。
更好的是,使用std::string
而不是固定长度的C样式字符串,您可以输入尽可能多的麻烦。