C++代码无报错但无输出:合并字符串到vector问题排查
问题分析与解决
核心问题
你代码里的vector<char> vec;默认初始化是空容器,没有分配任何内存空间。直接通过vec[i]赋值属于越界访问内存,这是C++里的未定义行为——虽然程序没崩溃,但实际上并没有把字符真正存入vector中,最终vec.size()仍然是0,所以输出循环根本不会执行,自然看不到任何输出。
修复方案
有两种简单的修复方式:
方式1:提前分配vector空间
先计算两个字符串的总长度,给vector分配足够的空间,再通过下标赋值:
#include <bits/stdc++.h> using namespace std; int main() { string str1; string str2; cin >> str1 >> str2; // 提前分配足够的空间 vector<char> vec(str1.size() + str2.size()); for(int i=0; i<str1.size(); i++){ vec[i] = str1[i]; } int k = str1.size(); for(int i=0; i<str2.size(); i++){ vec[k] = str2[i]; k++; } for(int i=0; i<vec.size(); i++){ cout << vec[i]; } }
方式2:用push_back添加元素(更安全)
不需要手动管理空间,直接把每个字符追加到vector末尾,这是vector最常用的添加元素方式:
#include <bits/stdc++.h> using namespace std; int main() { string str1; string str2; cin >> str1 >> str2; vector<char> vec; // 遍历str1,逐个添加字符 for(char c : str1){ vec.push_back(c); } // 遍历str2,逐个添加字符 for(char c : str2){ vec.push_back(c); } // 输出所有字符 for(char c : vec){ cout << c; } }
额外说明
- C++中,
string的length()和size()功能完全一致,用哪个都可以。 - 范围for循环(
for(char c : str1))比传统下标循环更简洁安全,能避免手动控制索引的错误。
内容的提问来源于stack exchange,提问作者Archit Sharma
相关产品推荐
相关产品推荐

