矢量到varargs

时间:2017-09-05 14:07:50

标签: c++ vector exec

我有一个vector<string>我希望推进execl,以便我的向量的每个成员都以char*的形式传入。这是可能的,如果可以的话,我该如何实现呢?

1 个答案:

答案 0 :(得分:0)

不,这是不可能的,但您可以使用execv代替。 execl采用可变长度 l 的参数,而execv采用 v ector(实际上是C数组)。但是,您必须从std::vector<std::string>转换为C字符串数组(char **)。另外execv需要一个以null结尾的数组,也就是说,数组的最后一个元素需要是一个空指针。但是这样的事情应该有效:

int exec_my_vector(std::string path, std::vector<std::string> v)
{
    const char *cv[v.size() + 1];
    unsigned i;
    for(i = 0; i < v.size(); i++)
        cv[i] = v[i].c_str();
    cv[i] = NULL;
    return execv(path.c_str(), (char * const *)cv);
}

(免责声明:在execv电话会议结束时有一个不可取的演员表,但这不是必要的,但我无法找到解决方法。)