DTS*_*ode 1 c++ string shell posix vector
我正在使用POSIX API在C ++中编写命令外壳,但遇到了麻烦。我正在通过execvp(3)执行,所以我需要以某种方式将包含命令的std :: string转换为可以传递给以下字符的合适的char * consts *数组:
int execvp(const char *file, char *const argv[]);
Run Code Online (Sandbox Code Playgroud)
我已经花了好几个小时动脑筋,但我想不出任何现实或理智的方法来做到这一点。对于我如何实现这种转换的任何帮助或见解,将不胜感激。谢谢你,有一个美好的一天!
编辑:根据Chnossos的请求,这是一个示例:
const char *args[] = {"echo", "Hello,", "world!"};
execvp(args[0], args);
Run Code Online (Sandbox Code Playgroud)
假设您的字符串包含多个“一个参数”,则首先必须拆分该字符串(使用a std::vector<std::string>
可以存储单独的字符串),然后对于向量中的每个元素,将该.c_str()
字符串的s存储为const char args[MAXARGS]
[或a 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 };
Run Code Online (Sandbox Code Playgroud)
会工作。