这是我的代码:
#include <iostream>
using namespace std;
int main(){
char inp[5], out[4];
cin >> inp >> out;
cout << inp << endl;
cout << out << endl;
system("pause");
return 0;
}
当我输入时:
12345 6789
它给了我:
6789
为什么我没能保存5个字符的char数组'inp'并且它什么都没显示?第二个输入看起来很正常。但是,当我列出[3]或[5]时,它似乎工作正常吗?似乎两个char数组[5]然后[4]会导致问题......
答案 0 :(得分:2)
我看到你输入(输入)1234567890
字符来输入inp[5]
的数据 - 这是一个问题,因为imp
数组能够存储4个字符和空终止符。当cin >> inp
将超过4个字符存储到inp
数组时,会导致数据出现问题(类似于未定义的行为)。因此,解决方案可以为数据分配更多内存,例如:
#include <iostream>
using namespace std;
int main(){
char inp[15], out[15]; // more memory
cin >> inp >> out;
cout << inp << endl;
cout << out << endl;
system("pause");
return 0;
}
答案 1 :(得分:1)
当您读入一个字符数组时,流将一直读取直到遇到空白为止,该流并不知道您传入的数组的大小,因此很高兴将其写入数组的末尾,因此,如果您的第一个字符串较长超过4个字符的程序将具有不确定的行为(在输入空终止符后会使用一个额外的字符)。
幸运的是,c ++ 20具有fixed this issue,流运算符不再接受原始char指针,而仅接受数组,并且最多只能读取size - 1
个字符。
即使使用c ++ 20,更好的解决方案是将您的类型更改为std::string
,该类型将接受任意数量的字符,甚至告诉您它包含多少个字符:
#include <iostream>
int main(){
std::string inp, out;
std::cin >> inp >> out;
std::cout << inp << "\n";
std::cout << out << "\n";
return 0;
}