我尝试使用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的字符数组
现在,我们将尝试使用chArray
在cin.get()
中输入超过30个字符。
字符数组的大小为30,但我们使用cin.get()
输入的字符数大于30,但大小仍为30。
chArray
的大小如何从30更改为我们使用cin.get()输入的字符串的大小?
请解释。
固定数组不能动态调整大小。声明数组后,就无法更改大小(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;
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';