【问题标题】:Vector into varargs向量到可变参数
【发布时间】:2017-09-05 14:07:49
【问题描述】:

我有(所有标准)vector<string>,我想将它推入execl,这样我的向量的每个成员都作为char* 传入。这可能吗?如果可以,我该如何实现?

【问题讨论】:

标签: c++ vector exec


【解决方案1】:

不,这是不可能的,但您可以改用execvexecl 采用可变长度的 list 参数,而 execv 采用 vector(实际上是一个 C 数组)。但是,您必须将 std::vector<std::string> 转换为 C 字符串数组 (char **)。另外execv 需要一个以空结尾的数组,即数组的最后一个元素需要是一个空指针。但是这样的事情应该可以工作:

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 调用结束时有一个可怕的演员阵容,这是不必要的,但我想不出办法。)

【讨论】:

  • 同样值得一提的是,转换不需要比指针向量本身更多的存储空间。它可以通过在原始向量的每个元素上调用c_str() 来填充。
  • @SteveSummit 表达式必须有一个常数值。尝试访问运行时存储。可变长度数组是 C99 特性。
猜你喜欢
  • 2011-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多