2017-09-05 109 views
-3

我有(所有std)vector<string>我想推入execl,这样我的向量的每个成员都被传入为char*。这是可能的,如果是这样,我该如何实现它?进入可变参数

+1

嗨!请参阅[问]以及如何创建[mcve]。你试过什么了? – msanford

+0

将其转换为'char const *'的向量,并使用'execv'代替。 –

回答

0

不,这是不可能的,但你可以用execv代替。 execl需要可变长度l ist of arguments,而execv需要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调用,不应该是必要的结束一个可怕的演员,但我不能想出办法解决它)

+1

同样值得一提的是,转换并不需要比指针本身更多的存储空间。可以通过在原始向量的每个元素上调用'c_str()'来填充它。 – StoryTeller