C++ 使用cin实现字符数组

C++ 使用cin实现字符数组,c++,arrays,char,cin,C++,Arrays,Char,Cin,这是我的密码: #包括 使用名称空间std; int main(){ 字符inp[5],out[4]; cin>>输入>>输出; 我看到您输入了(type)1234567890字符来为inp[5]输入数据-这是一个问题,因为imp数组能够存储4个字符和空终止符。当cin>>inp数组存储超过4个字符时,会导致数据出现问题(类似于未定义的行为)。因此解决方案可以为数据分配更多内存,例如: #包括 使用名称空间std; int main(){ char inp[15],out[15];//内存更多

这是我的密码:

#包括
使用名称空间std;
int main(){
字符inp[5],out[4];
cin>>输入>>输出;
我看到您输入了(type)
1234567890
字符来为
inp[5]
输入数据-这是一个问题,因为
imp
数组能够存储4个字符和空终止符。当
cin>>inp
数组存储超过4个字符时,会导致数据出现问题(类似于未定义的行为)。因此解决方案可以为数据分配更多内存,例如:

#包括
使用名称空间std;
int main(){
char inp[15],out[15];//内存更多
cin>>输入>>输出;
我看到您输入了(type)
1234567890
字符来为
inp[5]
输入数据-这是一个问题,因为
imp
数组能够存储4个字符和空终止符。当
cin>>inp
数组存储超过4个字符时,会导致数据出现问题(类似于未定义的行为)。因此解决方案可以为数据分配更多内存,例如:

#包括
使用名称空间std;
int main(){
char inp[15],out[15];//内存更多
cin>>输入>>输出;

cout当您读入字符数组时,流会一直读取,直到遇到空格为止,流不知道您传入的数组的大小,因此很高兴写入数组末尾,因此如果您的第一个字符串超过4个字符,则程序将有未定义的行为(在输入空终止符后使用一个额外字符)

幸运的是,c++20已经实现了,流操作符不再接受原始字符指针,只接受数组,并且只能读取
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;
}
#包括
int main(){
std::字符串输入,输出;
标准:cin>>输入>>输出;

std::cout当您读入字符数组时,流会一直读取,直到遇到空格为止,流不知道您传入的数组的大小,因此很高兴写入数组末尾,因此如果您的第一个字符串超过4个字符,那么您的程序将有未定义的行为(在输入空终止符后使用一个额外字符)

幸运的是,c++20已经实现了,流操作符不再接受原始字符指针,只接受数组,并且只能读取
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;
}
#包括
int main(){
std::字符串输入,输出;
标准:cin>>输入>>输出;

std::你能先写11个字符吗(包括尾随的
'\0'
)到一个5字符数组。幸运的是,在这一点上没有发生任何爆炸。然后,您将另外11个字符写入一个4字符数组。在
out
中用完空间后,数据溢出到
inp
。请修复数组大小,或限制输入的长度。您首先要写入11个字符(包括尾随的
'\0'
)到一个5字符的数组。幸运的是,在这一点上没有发生任何爆炸。然后,你将另外11个字符写入一个4字符的数组。在
out
中用完空间后,数据溢出到
inp
中。修复你的数组大小,或者限制你输入的长度。我刚刚发现了一些奇怪的事情。只有当我设置第一个字符时,问题才会发生大小为5的数组和大小为4的第二个数组。当我将第二个数组的数组大小设置为5甚至3时,问题消失了。我用输入12345和6789来编辑我的问题,而不是使用长数字。为了正确存储5个字符,数组必须至少有6个
char
项,因为
cin>
添加了
'\0'
用户键入字符后(以及
scanf
函数)我刚刚发现了一些奇怪的事情。只有当我将第一个数组的大小设置为5,第二个数组的大小设置为4时,问题才会发生。当我将第二个数组的大小设置为5甚至3时,问题消失了。我用输入12345和6789编辑了我的问题,而不是使用长数字来编辑数组必须在l处正确存储5个字符east 6
char
项,因为
cin>
在用户键入的字符后添加
'\0'
(以及
scanf
函数)