涉及将要馈送的向量转换为execvp的错误类型
Wrong types involving converting a vector to feed to execvp
我有一个字符串向量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*>
,在这个向量中设置指针的方式是指向另一个向量中的数据。一旦填充了std::vector<char*>
,那么char**
只是指向第一个项目的指针。
顺便说一句,这是使用vector<char *>
而不是vector<string>
的正当理由之一。在大多数其他情况下,如果您想要一个字符串向量,可以使用vector<string>
。
c_str()
返回一个指向其内部缓冲区的const char指针,该缓冲区的内容不允许更改(这就是它的const),并且显然不能分配给您的char缓冲区。您需要为每个字符串分配内存,并复制它:
argv[index] = new char[c->args[index].length()];
strcpy(argv[index], c->args[index].c_str());
包括strcpy的CCD_ 9报头。
也许这会有所帮助:
char const **argv = new const char* [c->args.size() + 1];
相关文章:
- 防止主数据类型C++的隐式转换
- 模板参数替换失败,并且未完成隐式转换
- 努力将整数转换为链表。不知道我在这里做错了什么
- HEX值到wchar_t字符(UTF-8)的转换
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将 Qvector<uint8_t> 转换为 QString
- 如何在cuSparse中使用cusparseXcoo2csr从coo转换为csc
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 在c++中使用nlohmann从类到json的转换
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- 复制列表初始化的隐式转换的等级是多少
- 正在将指针转换为范围
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 是否可以从int转换为enum类类型
- 了解 GLM- openGL 中的相机转换
- 涉及将要馈送的向量转换为execvp的错误类型