以下是我的函数原型(我们无法更改此函数的原型):
char** myfun()
{
// implementation
}
如何从此函数返回char *数组,以便我可以在此方法的调用者中访问/打印数组的内容。我尝试使用动态内存分配创建一个数组,但它无法正常工作。
是否可以在没有动态内存分配的情况下执行此操作。 请给我指针?
答案 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;
}
或者,在旧的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;
}
答案 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];
}
- 编辑
您不必使用动态分配,您可以返回本地静态变量。请记住,这不是一个好方法:函数不是线程安全的或可重入的。