C++ 变参数向量

C++ 变参数向量,c++,vector,exec,C++,Vector,Exec,我所有的std都有一个向量,我想把它放入execl,这样我的向量的每个成员都作为char*传入。这可能吗?如果可能,我如何实现它?不可能,但您可以改用execv。execl接受一个可变长度的参数列表,而execv接受的向量实际上是一个C数组。但是,您必须将std::vector转换为字符串char**的C数组。此外,execv需要以null结尾的数组,即数组的最后一个元素需要是null指针。但像这样的方法应该有效: int exec_my_vector(std::string path, std

我所有的std都有一个向量,我想把它放入execl,这样我的向量的每个成员都作为char*传入。这可能吗?如果可能,我如何实现它?

不可能,但您可以改用execv。execl接受一个可变长度的参数列表,而execv接受的向量实际上是一个C数组。但是,您必须将std::vector转换为字符串char**的C数组。此外,execv需要以null结尾的数组,即数组的最后一个元素需要是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通话结束时有一个可怕的演员阵容,这本不必要,但我想不出解决办法。

嗨!请参阅和如何创建一个。到目前为止,您尝试了什么?将其转换为char const*的向量,并改用execv。同样值得一提的是,转换不需要比指针向量本身更多的存储空间。它可以通过对原始向量的每个元素调用c_str来填充。