我正在进行一项任务,我正在创建自己的命令shell。我已将输入字符串正确地标记为多个字符串。我正在试图弄清楚如何在execvp中使用这些字符串。
我的想法是,如果我有这样的矢量:
vector<string> s;
s[0] = "ls";
s[1] = "-a";
s[2] = "-l";
我希望能够使用execvp运行命令ls -a -l
。
我想过使用c_str()
将我的字符串转换为const char *
,因为我认为execvp
接受const char *
,但这对我不起作用。
我该怎么做?
感谢大家的帮助和反馈!真的很感激。
答案 0 :(得分:0)
使用execvp
你想要一个char*
指针数组作为第二个参数。我会这样做:
代码是:
char cmd[] = "ls";
char p1[] = "-l";
char p2[] = "-a";
vector<char*> parameters;
parameters.push_back(p1);
parameters.push_back(p2);
execvp(cmd, parameters.data());
如果c + 11编译器可用,则只能使用std::vector::data()
,因为std::vector::data()
是c ++ 11功能。要使用c + 11编译器,请将-std=c++11
添加到编译选项中。
希望这有帮助
答案 1 :(得分:0)
我想我已经明白了。
我创建了一个函数,它将strings
的向量作为输入,并输出char *
的向量。
vector<char *> stringToChar(vector<string> s){
vector<char *> c;
for(int i = 0; i < s.size(); ++i){
char *str;
str = new char[s[i].size() + 1];
memcpy(str, s[i].c_str(), s[i].size() + 1);
c.push_back(str);
}
return c;
}