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为啥会乱码。

我想要达到的结果

你返回了局部变量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;
}


#include<iostream>
#include<vector>
using namespace std;
char* test(int a)
{
    char n[] = "g123";
    char* ss =new char[5]();
    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;
    vector<char*>::iterator it;
    for (it = s.begin(); it != s.end(); it++)
        delete[] *it;
    vector<char*>().swap(s);
    return 0;
}

vector<char*> s;
for (int i = 0; i < 2; i++)
{
s.push_back((char*)test(2));
}
这块vector泛型应定义为string