You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么C++中无法在for循环内为未初始化的string赋值?

为什么for循环中给未初始化的string赋值无输出?

你的测试代码里,result是默认初始化的std::string,它初始状态是空的——长度为0,没有任何可访问的字符元素。

当你在循环里执行result[i] = s[i]时,本质是在访问超出result当前范围的内存,这属于C++里的未定义行为。未定义行为的结果不确定,可能是程序崩溃、输出乱码,也可能像你遇到的那样完全没有输出,这都是错误操作导致的正常表现。

而直接用result = s时,std::string的赋值运算符会自动完成内存管理:它会先为result分配足够容纳s所有字符的内存空间,再把s的内容拷贝进去,整个过程合法且符合标准,所以能正常输出结果。

修正方法

如果一定要用循环实现,可以提前给result分配空间:

string s, result;
cin >> s;
result.resize(s.length()); // 提前分配足够的空间
for(int i=0; i<s.length(); i++){
    result[i] = s[i];
}
cout << result;

或者用push_back自动扩展内存:

string s, result;
cin >> s;
for(int i=0; i<s.length(); i++){
    result.push_back(s[i]);
}
cout << result;

内容的提问来源于stack exchange,提问作者अंशुल

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 19:06:27