qq_43576040 2022-02-27 21:12 采纳率: 66.7%
浏览 155
已结题

C++中vector容器push_back一个返回值为char*的函数,输出为乱码,怎么解决?

问题遇到的现象和发生背景

问题代码如下,我开始以为是ss数组中没有设置空字符。但是设置以后依然输出乱码,问题在哪呢到底?

问题相关代码,请勿粘贴截图
char* test(int a)
{

    char n[] = "g123";
    char ss[5] = { 0};
    /*ss[3] = { '\0' };*/
    ss[0] = 'G';
    ss[1] = '0';
    ss[a] = n[0];
    ss[a + 1] = n[1];
    cout << ss << endl;
    return ss;
}
int main()
 {
vector<char*> s;
for (int i = 0; i < 2; i++) 
{
s.push_back((char*)test(2));
}
cout <<test(2) << endl;
cout << s[0] << endl;
    return 0;
}
运行结果及报错内容

img

我的解答思路和尝试过的方法

我单独输出test(2)都没问题,不知道vector为啥会乱码。

我想要达到的结果
  • 写回答

3条回答 默认 最新

  • 真相重于对错 2022-02-27 21:29
    关注

    你返回了局部变量ss的地址,返回后已经被别的变量覆盖自然乱码

    #include <iostream>
    #include <vector>
    using namespace std;
    string test(int a)
    {
    
        char n[] = "g123";
        char ss[5] = { 0 };
        /*ss[3] = { '\0' };*/
        ss[0] = 'G';
        ss[1] = '0';
        ss[a] = n[0];
        ss[a + 1] = n[1];
        cout << ss << endl;
        string res(ss);
        return ss;
    }
    int main()
    {
        vector<string> s;
        for (int i = 0; i < 2; i++)
        {
            s.push_back(test(2));
        }
        cout << test(2) << endl;
        cout << s[0] << endl;
        return 0;
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 3月7日
  • 已采纳回答 2月27日
  • 创建了问题 2月27日

悬赏问题

  • ¥15 echarts动画效果失效的问题。官网下载的例子。
  • ¥60 许可证msc licensing软件报错显示已有相同版本软件,但是下一步显示无法读取日志目录。
  • ¥15 Attention is all you need 的代码运行
  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
  • ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事:
  • ¥15 前置放大电路与功率放大电路相连放大倍数出现问题
  • ¥30 关于<main>标签页面跳转的问题
  • ¥80 部署运行web自动化项目
  • ¥15 腾讯云如何建立同一个项目中物模型之间的联系
  • ¥30 VMware 云桌面水印如何添加