[使用cin.get()进行字符数组初始化

问题描述 投票:0回答:2

我尝试使用cin.get()进行以下操作,如下所示:

char chArray[30]="character array with size "; //current string size is 25 character with null character
cout<< chArray << sizeof(chArray)<< endl;
cout<< "Now we will try to enter more than 30 character in chArray using cin.get()";
cin.get(chArray,100);
cout<< chArray << endl << sizeof(chArray)<< endl;

上面代码的输出很奇怪,如下所示:

大小为30的字符数组

现在,我们将尝试使用chArraycin.get()中输入超过30个字符。

字符数组的大小为30,但我们使用cin.get()输入的字符数大于30,但大小仍为30。

chArray的大小如何从30更改为我们使用cin.get()输入的字符串的大小?

请解释。

c++ arrays string char cin
2个回答
0
投票

固定数组不能动态调整大小。声明数组后,就无法更改大小(sizeof()在编译时固定)。您的代码存在缓冲区溢出,如果您尝试输入的字符数超出数组可容纳的字符数,则会破坏周围的内存。在您的示例中,您的数组最多只能容纳30个char s,但是您告诉cin它可以读取最多 100个char s(很好,99个,加上一个空终止符)。数组。

对于您要执行的操作,您需要读入std::string而不是char[]数组。 size()std::string可以在运行时动态更改,例如:

#include <string>

std::string str = "character string with size ";
std::cout << str << str.size() << std::endl;
std::cout << "Now we will try to enter more than 30 character in str using cin";
std::cin >> str; // or: std::getline(std::cin, str);
std::cout << str << std::endl << str.size() << std::endl;

0
投票

chArray的大小如何从30更改为我们使用cin.get()输入的字符串的大小?

C ++中的数组具有固定大小。这意味着您给它们指定了特定大小,并且编译器在编译时就知道了。此大小不变。曾经。

但是,我们在C ++中有string,如果您想要一个可以根据需要更改其大小的容器,可以使用它。示例:

std::string mystr;
std::cout << "Mystr size before: " << mystr.size() << '\n';
std::getline (std::cin, mystr);
std::cout << "Mystr size after: " << mystr.size() << '\n';
© www.soinside.com 2019 - 2024. All rights reserved.