gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:01:03 24 4
gpt4 key购买 nike

我想准备一个老式的参数 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/

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