如何在c / c ++函数中返回char *数组?

时间:2014-11-12 04:47:23

标签: c++ c

以下是我的函数原型(我们无法更改此函数的原型):

char** myfun()
{
  // implementation
}

如何从此函数返回char *数组,以便我可以在此方法的调用者中访问/打印数组的内容。我尝试使用动态内存分配创建一个数组,但它无法正常工作。

是否可以在没有动态内存分配的情况下执行此操作。 请给我指针?

2 个答案:

答案 0 :(得分:1)

#include <string>
#include <vector>
#include <iostream>

std::vector<std::string> myfun() {
    return {"hello", "vector", "of", "strings"};
}

int main() {
    using namespace std;

    auto v_of_s = myfun();
    for (auto &s : v_of_s) {
        cout << s << ' ';
    }
    cout << endl;
}

Live Example

或者,在旧的C ++中:

#include <string>
#include <vector>
#include <iostream>
#include <iterator>
#include <algorithm>

std::vector<std::string> myfun() {
    std::vector<std::string> v_of_s;
    v_of_s.push_back("hello");
    v_of_s.push_back("vector");
    v_of_s.push_back("of");
    v_of_s.push_back("strings");
    return v_of_s;
}

int main() {
    using namespace std;

    vector<string> v_of_s = myfun();
    copy(v_of_s.begin(), v_of_s.end(), ostream_iterator<string>(cout, " "));
    cout << endl;
}

Live Example

答案 1 :(得分:1)

除非你想要从这个函数返回一个全局char * [],是的,你需要动态分配,这是你可以安全地返回在函数内创建的变量的唯一方法,对于存储在堆栈中的所有变量一旦函数完成,它将被销毁。

char** myfun()
{
     char **p = new char*[10];
     return p;
     //or return new char*[10];
}

int main() {

    char **pp = test();

    char *p = "aaa";

    pp[0] = p;

    delete[] pp; //if you allocate memory inside the array, you will have to explicitly free it:
                 //Example: pp[1] = new char("aaa"); would require delete p[1]; 

}

- 编辑

您不必使用动态分配,您可以返回本地静态变量。请记住,这不是一个好方法:函数不是线程安全的或可重入的。