c++ - 将 std::string 转换为 char* const* 的数组

标签 c++ string shell vector posix

我正在使用 POSIX api 在 C++ 中编写命令 shell,但遇到了障碍。我正在通过 execvp(3) 执行,所以我需要以某种方式将包含命令的 std::string 转换为合适的 char* consts* 数组,可以传递给:

int execvp(const char *file, char *const argv[]);

我已经绞尽脑汁好几个小时了,但我想不出任何现实或理智的方法来做到这一点。非常感谢任何有关如何实现此转换的帮助或见解。谢谢你,祝你有美好的一天!

编辑: 根据 Chnossos 的要求,这里有一个例子:

const char *args[] = {"echo", "Hello,", "world!"};
execvp(args[0], args);

最佳答案

假设您有一个包含多个“参数”的字符串,您首先必须拆分字符串(使用 std::vector<std::string> 可以存储单独的字符串),然后对于 vector 中的每个元素,存储.c_str()将该字符串转换为 const char args[MAXARGS] [或 std::vector<const char*> args;并使用 args.data()如果你不介意使用 C++11]。不要忘记存储 0nullptr在最后一个元素中。

如果使用 c_str 很关键您所基于的字符串不是临时字符串:const char* x = str.substr(11, 33).c_str();不会给你你想要的东西,因为在该行的末尾,临时字符串被销毁,它的存储空间被释放。

如果你只有一个实参,

const char* args[2] = { str.c_str(), 0 }; 

会起作用。

关于c++ - 将 std::string 转换为 char* const* 的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30613778/

相关文章:

c++ - boost::ref 是如何工作的?

java - 实习字符串在不同线程和类加载器之间的行为如何?

c++ - 确定字符串是否具有相同的字符

c++ - 分配bitset c++的不同区域

c - 我有一些关于如何将生成的数据保存在新字符串中的 for 循环中的问题

c - 打印一个字符数组(C)只有第一个字母

linux - 如何通过脚本检测命令行上文本的颜色?

Windows 子命令评估

linux - bash 中 ./name.sh 旁边的变量

android - boost Android Asio 连接错误