c++ - 将 std::vector<char*> 转换为 C 风格的参数 vector arv

标签 c++ vector exec argv

我想准备一个老式的参数 vector (argv) 在函数中使用

int execve(const char *filename, char *const argv[],char *const envp[]);

我用 STL::vector 类试过:

std::string arguments = std::string("arg1");    
std::vector<char*> argv; 
char argument[128];
strcpy(argument, arguments.c_str());
argv.push_back(argument); 
argv.push_back('\0'); // finish argv with zero

最后我将 vector 传递给 execve()

execve("bashscriptXY", &argv[0], NULL)

代码编译但 ArgV 被 execve()“忽略”。所以这似乎是错误的,我正在尝试。我应该如何使用 C++ 高效地构建 argV?

最佳答案

我认为 char[128] 是多余的,因为本地字符串将具有相同的生命周期,另外,尝试将程序添加为 argv[0],就像 rossoft 在他的回答中所说的那样:

const std::string arguments("arg1");    
std::vector<const char*> argv;

argv.push_back("bashscriptXY");
// The string will live as long as a locally allocated char*
argv.push_back(arguments.c_str()); 
argv.push_back(NULL); // finish argv with zero

execve(argv[0], &argv[0], NULL);

关于c++ - 将 std::vector<char*> 转换为 C 风格的参数 vector arv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1683263/

相关文章:

c++ - WinSock 无缘无故返回 SOCKET_ERROR

c++ - 如何在 GMock 中使用带有测试夹具的模拟?

vector - 如何访问 vector<struct> *obj 中的变量?

java - 从 Java 执行命令时出现问题

C、fork和exec进程,并发送信号

c++ - 模板而非 g++ 的 MSVC 重载错误

c# - 计算 Windows Mobile/CE 设备上的当前 CPU 使用率

c++ - 未知容器、 vector 或数组的大小 c++

重复数值向量

php - 如何从 php 传递参数调用 bash 脚本