问题代码如下,我开始以为是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;
}
我单独输出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