c++ - 在 C++ 中将字符串转换为 argv

标签 c++ stdstring argv

我有一个 std::string 包含一个要用 execv 执行的命令,将它转换为 execv() 的第二个参数所需的“char *argv[]”的最佳“C++”方法是什么?

澄清一下:

std::string cmd = "mycommand arg1 arg2";
char *cmd_argv[];

StrToArgv(cmd, cmd_argv); // how do I write this function?

execv(cmd_argv[0], cmd_argv);

最佳答案

这里的答案非常不统一。有什么问题:

std::string cmd = "echo hello world";
execl("/bin/sh", "/bin/sh", "-c", cmd.c_str(), NULL);

既然系统上已经有一个非常好的命令行解析器,为什么还要费心编写一个命令行解析器?

(注意:一个很好的理由是因为您不信任您将要执行的字符串。有人希望这已经是真的,但是 shell 将对该字符串执行“更多”操作,而不是简单的空白分隔符如果您不小心,将会打开更多的安全漏洞。)

关于c++ - 在 C++ 中将字符串转换为 argv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1511797/

相关文章:

c++ - 如何列出 .so 文件中的符号

c++ - 使用 basic_string 声明新的字符串类型

c++ - 我的函数操作 std::string 产生了意想不到的结果

c++ - 从argv [1]转换为char * string后,出现什么问题?

BASH 脚本 : n-th parameter of $@ when the index is a variable?

c++ - 为什么我可以在私有(private)类型上使用 auto?

c++ - 为什么或为什么不应该使用 'UL' 来指定 unsigned long?

c++ - 在与父进程相同的监视器上运行进程

c++ - std::string 是否总是需要堆内存?

c - 为什么我的 argv[1] 值发生变化? (C)