从C ++中的函数返回字符串数组

时间:2012-06-13 05:34:07

标签: c++ arrays string vector

我在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提前!!

5 个答案:

答案 0 :(得分:1)

在第一个版本中,您将返回一个指向本地变量(您的数组)的指针,当您离开作用域时,该指针将不再存在。您需要在堆上创建数组,例如使用mallocnew。如果您手动分配,请不要忘记取消分配。

在第二个版本中,您将返回函数中声明的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;
}