我在C ++中处理字符串数组时遇到问题。我在下面尝试了两种方法。还没有 无法解决问题......在这里: 当我使用时:
string* fun(string* a,string*b)
{
string c[];
return c; /* c is string array type*/
}
它返回存储在字符串数组c中的第一个字符串。我希望返回整个字符串数组。 我用的时候:
vector<string> fun(vector<string> a,vector<string> b){
vector<string> c;
return c;
}
仍然,我有一些错误 你能帮助我知道两种情况下的问题在哪里。 需要进行哪些修改才能获得所需的结果.. 如何在C ++中处理字符串数组。 Thanx提前!!
答案 0 :(得分:1)
在第一个版本中,您将返回一个指向本地变量(您的数组)的指针,当您离开作用域时,该指针将不再存在。您需要在堆上创建数组,例如使用malloc
或new
。如果您手动分配,请不要忘记取消分配。
在第二个版本中,您将返回函数中声明的vector
的副本(如果您修改了返回的string
中的vector
,则不会修改它们在a
et b
)中。您正在创建一个空vector
而不添加任何内容,因此它不会包含任何string
。
答案 1 :(得分:1)
如果你必须返回一个比字符串更复杂的对象,你应该向你的函数传递一个指向vector的链接(在你的代码中)并用值填充它。这是一种快速正确的方法。
vector<string> fun(vector<string> a,vector<string> b, vector<string>& result){
res.push_back("one");
res.push_back("two");
res.push_back("three");
}
答案 2 :(得分:0)
在您的第一个代码段中,您可以尝试使用new
进行初始化以自行分配空间。
string* func() {
string* c = new string[3];
c[0] = "Hello";
c[1] = "World";
c[2] = "<3";
return c;
}
在main中:
m = func();
for(int i = 0; i < 3; i++)
{
cout << m[i] << endl;
}
一旦该功能结束,这应该可以防止它失去范围。不要忘记释放空间。请注意,您将返回指向数组的指针,而不是数组。此外,我运行您的第二段代码没有问题。请始终分享您所获得的错误。
答案 3 :(得分:0)
在C / C ++中,从函数返回一个字符串,如果返回则无法使用本地缓冲区。
返回的指针应该是一个静态缓冲区(如静态字符串c [])或指向调用函数传入的缓冲区的指针(如string * fun(string * a,string * b,string * c))或指向使用malloc / new但不是本地数组获得的内存的指针。
答案 4 :(得分:0)
你不能直接在C ++中返回数组(它从C继承它)。解决它的方法是将其填充到结构中。
struct returned_array
{
string result[100];
};
returned_array fun()
{
returned_array result;
result.result[0] = "whatever";
return result;
}
我刚刚为这个例子挑选了一个任意大小的100。如果要将返回大小基于传入的数组大小,可以添加模板参数:
template<int N>
struct returned_array
{
string result[N];
};
template<int N>
returned_array<N> fun(string (&)[N])
{
returned_array<N> result;
result.result[0] = "whatever";
return result;
}