c++ - 使用 cin.get() 初始化字符数组
问题描述
我正在尝试一些不同的东西,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
现在我们将尝试在using中输入 30 多个字符cin.get()
。
字符数组大小为 30,但我们输入超过 30,cin.get()
但大小仍为 30。
大小如何chArray
不从 30 变为我们使用输入的字符串的大小cin.get()
?
请解释。
解决方案
固定数组不是动态大小的。一旦声明了数组,它就不能改变大小(sizeof()
在编译时是固定的)。如果您尝试输入的字符多于数组可以容纳的字符,您的代码会出现缓冲区溢出,这将破坏周围的内存。在您的示例中,您的数组最多只能容纳 30char
秒,但您告诉cin
它最多可以将100char
秒(好吧,99,加上一个空终止符)读入数组。
对于您要执行的操作,您需要读入 astd::string
而不是char[]
数组。的size()
astd::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;
推荐阅读
- vba - 当我的变量错误时,VBA Object Required Error,不知道如何修复
- java - Selenium:线程“主”org.openqa.selenium.NoSuchSessionException 中的异常:
- r - R studio 时差 mm/dd/yy hh:mm 格式
- php - 使用 PHPSpreadsheet 导出 .xlsx,读取创建 HTML 表的 .php 文件
- typescript - 如何强制 Typescript 编译器在使用 --outFile 编译时发出定义调用?
- ssl - 如何为远程 JMX 连接设置自定义 RMI 客户端套接字工厂?
- python - 尝试使用 API 将数据导入 excel
- android - 如何禁用“从顶部向下滑动以退出全屏”消息
- ios - 如何在 AR 应用中同时包含和运行图像跟踪配置和世界跟踪配置
- javascript - Firebase 数据库路径无效错误