关于使用string类以数组的形式输入却无法用cout输出的问题.
目录
前言:
这个问题困扰了我挺长时间,从在学校做数据结构课设时使用string类时就发现了这个问题但一直没有解决,直接在网上搜索搜到的也是一些关于头文件错误的回答,的我的错误并不一样.问题很小但是不解决的话影响很大.
问题描述:
赋值字符串s时使用for循环的方式赋值无法用cout输出,而在定义时直接赋值可以用cout输出,这是为什么?并且如果将s引用到子函数里边,再将其返还赋值给主函数里边的另一个串的时候程序就会停止运行.
两种赋值方法如下:
string s ="A,B,C";
/*for(int i=0;i<3;i++){
cin>>s[i];
} */
cout<<s;
运行结果如下:
错误原因:
因为直接定义string s;后用for循环赋值后下标越界无法实现输出.包括后边的关于子函数的问题也是如此.
解决方法:
只需定义s时注意分配足够的空间,比如后边需要为s赋值13个字符,初始化时要分配空间为n(n>=13).
例如:
string s(10, ' ');
for(int i=0;i<3;i++){
cin>>s[i];
}
但此时使用s.size()返还的长度是10,并不是输入的3.
此后通过截取字符段的函数substr截取足够的长度赋值给新的串,便可得到输入的串.
string s2=s.substr(0,3);
此时的s2.size()为3;
当然为s赋值时可直接使用cin;
cin>>s;
cout<<s.size();
此时s.size的长度为输入的真正长度而不是s初始化时的10;
小结:
虽说这个问题很小知道错误原因之后感觉很简单,但是如果在不了解原因的情况下去在网上搜索却很难搜索到(可能是我太菜了,这个问题太简单了之前都没人问),写下这篇文章的目的就是如果有谁和我犯了一样的错误,可以了解一下这个点去注意一下.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)