为什么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,提问作者अंशुल
相关产品推荐
相关产品推荐

