我正在使用 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]。不要忘记存储 0
或 nullptr
在最后一个元素中。
如果使用 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/