如何使用std :: string作为命令与system()调用?

时间:2014-09-29 18:41:38

标签: c++

我正在尝试将字符串传递给system()shell命令函数。我试图将连接的字符串传递给它,如下所示:

string parameters = "Doug";
system("ps -ef|grep " + parameters);

它一直给我错误,因为system()接受char *。我将如何使system()函数工作。我尝试使用parameters.c_str()但不起作用。谢谢!

3 个答案:

答案 0 :(得分:6)

您需要在连接结果上调用c_str()

system(("ps -ef|grep " + parameters).c_str());

(请注意括号。)

答案 1 :(得分:2)

  

因为system()采用char *。

system()需要char*参数(const char*)。您可以通过构造完整的命令行来传递第一个

,方法如下
string cmd = "ps -ef|grep ";
cmd += parameters;

system(cmd.c_str());

好吧,因为来自proven@NPE's answer+的{​​{1}}运算符超载,支持以下签名

std::string

因此

std::string operator+(const char*, const std::string&);
编译器可以解析

,因为system(("ps -ef|grep " + parameters).c_str()); 操作有临时std::string实例,并将该临时结果实例的+值作为c_str()参数传递const char*函数要求。

答案 2 :(得分:2)

如果你打算这么做(根本),我会考虑写一个system的重载,它接受一个std::string作为参数:

void system(std::string const &s) { 
    std::system(s.c_str());
}

然后其余代码可以创建std::string并将它们传递给system而不会出现任何问题,因此您的原始代码为:

string parameters = "Doug";
system("ps -ef|grep " + parameters);

...编译并运行得很好。