如果我有一个字符串向量,我如何使用execvp的字符串来执行命令?

时间:2014-10-19 16:36:55

标签: c++ string char const execvp

我正在进行一项任务,我正在创建自己的命令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 *,但这对我不起作用。

我该怎么做?

感谢大家的帮助和反馈!真的很感激。

2 个答案:

答案 0 :(得分:0)

使用execvp你想要一个char*指针数组作为第二个参数。我会这样做:

  1. 创建选项
  2. 制作一个指针向量
  3. 直接使用矢量数据
  4. 代码是:

    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;
}