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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 23:17:11