gpt4 book ai didi

c++ - 涉及将 vector 转换为 feed 到 execvp 的错误类型

转载 作者:行者123 更新时间:2023-11-28 00:04:11 25 4
gpt4 key购买 nike

我有一个字符串 vector vector<string> args我需要将其转换为 c 字符串,然后通过 execvp 调用作为参数运行。我不断收到错误“对于循环中的行,从 const char* 到 char* 的无效转换。我不明白如何解决这个问题,同时仍然会产生一些我可以提供给 execvp 的东西。虽然我看过类似的帖子,但没有我遇到的解决方案似乎解决了我的问题。

    int argsLen = c->args.size();
char **argv = new char* [c->args.size() + 1];
for (int index = 0; index < c->args.size(); ++index)
argv[index] = c->args[index].c_str();//note that c is the structure in which args is contained
argv[c->args.size() + 1] = NULL;

//execvp(argv[0], argv);

最佳答案

如果你想在没有泄漏内存或内存覆盖的情况下执行此操作,你可以执行以下操作:

typedef std::vector<char> CharArray;
typedef std::vector<CharArray> ArgumentVector;
//...
ArgumentVector argVec;
std::vector<char *>argv;
for (int index = 0; index < c->args.size(); ++index)
{
// get the command and create copy
argVec.push_back(CharArray(c->args[index].begin(), c->args[index].end()));

// get pointer to newly created entity and place in argv vector
argV.push_back(argVec.back().data());
}

// the last argument is NULL
argV.push_back(NULL);

execvp(argV[0], // the first item in the array
argV.data(), // the char** we are sending

我们所做的就是创建一个 std::vector<char*> ,而我们在这个 vector 中设置指针的方式是指向另一个 vector 中的数据。一旦std::vector<char*>已填充,则 char**只是指向第一项的指针。

顺便说一句,这是使用 vector<char *> 的正当理由之一而不是 vector<string> .在大多数其他情况下,如果你想要一个字符串 vector ,你可以使用 vector<string> .

关于c++ - 涉及将 vector 转换为 feed 到 execvp 的错误类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36669797/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com