我有shared_ptr
数组char
,如下所示:
std::shared_ptr<char[]> tmp [ 10 ] ;
我填充了tmp
,现在想要将数据传递给execl()
,这需要char * const *
。什么是正确的方法?
答案 0 :(得分:0)
我有一个
数组shared_ptr
char
你拥有的是10个默认构造的std::shared_ptr
对象的静态数组。那是你真正想要的吗?
或者您是否需要一个包含指向单个数组的指针的std::shared_ptr
对象?
std::shared_ptr<char[]> tmp(new char[10]);
我填充了
tmp
,现在想要将数据传递给execl()
,这需要char * const *
。
不,它没有。它需要2 + const char*
个参数。仔细看看声明:
int execl(const char *path, const char *arg, ...);
const char*
和char * const *
之间存在大差异。
这样做的正确方法是什么?
std::shared_ptr<char[]>::get()
方法将返回char*
,可以将其传递给const char*
参数。
更新:如果您尝试将10个单独的char[]
数组传递给execl()
,每个参数一个,那么您的静态数组就可以了。只需为要传递给tmp[index].get()
的每个参数调用execl()
:
std::shared_ptr<char[]> tmp[10];
// populate tmp, then ...
execl(file, tmp[0].get(), tmp[1].get(), ..., tmp[9].get());
或者,改为使用execv()
:
std::shared_ptr<char[]> tmp[10];
// populate tmp, then ...
char* args[11];
for (int i = 0; i < 10; ++i)
args[i] = tmp[i].get();
args[10] = nullptr;
execv(file, args);
如果您事先不知道参数的数量,那么这一点特别有用:
std::vector<std::shared_ptr<char[]>> tmp;
// populate tmp, then ...
std::vector<char*> args;
for (auto &p : tmp)
args.push_back(p.get());
args.push_back(nullptr);
execv(file, args.data());