我正在尝试将字符串传递给system()shell命令函数。我试图将连接的字符串传递给它,如下所示:
string parameters = "Doug";
system("ps -ef|grep " + parameters);
它一直给我错误,因为system()接受char *。我将如何使system()函数工作。我尝试使用parameters.c_str()但不起作用。谢谢!
答案 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);
...编译并运行得很好。