我想將一個字符串傳遞給system()shell命令函數。我想爲一個連接字符串傳遞到它像這樣:如何使用std :: string作爲system()調用的命令?
string parameters = "Doug";
system("ps -ef|grep " + parameters);
它不斷給我的錯誤,因爲系統()採用一個char *。我將如何去關於system()函數的工作。我試着把parameters.c_str()但不起作用。謝謝!
我想將一個字符串傳遞給system()shell命令函數。我想爲一個連接字符串傳遞到它像這樣:如何使用std :: string作爲system()調用的命令?
string parameters = "Doug";
system("ps -ef|grep " + parameters);
它不斷給我的錯誤,因爲系統()採用一個char *。我將如何去關於system()函數的工作。我試着把parameters.c_str()但不起作用。謝謝!
你需要調用c_str()
在連接結果:
system(("ps -ef|grep " + parameters).c_str());
(注意括號)
因爲系統()採用一個char *。
是system()
需要char*
參數(分別爲const char*
)。你可以這樣做以下方式,通過構建完整的命令行傳遞第一
string cmd = "ps -ef|grep ";
cmd += parameters;
system(cmd.c_str());
好,因爲它是proven從@NPE's answer有一個重載+
運營商std::string
,支持以下簽名
std::string operator+(const char*, const std::string&);
因此
system(("ps -ef|grep " + parameters).c_str());
可以由編譯器解決,作爲+
操作的結果而具有臨時std::string
實例,並將該臨時結果實例的c_str()
值作爲system()
函數所需的const char*
參數傳遞。
如果你要做到這一點非常多(在所有),我會考慮寫一個接受std::string
作爲參數的system
過載:
void system(std::string const &s) {
std::system(s.c_str());
}
然後將代碼的其餘部分可以創建std::string
S和它們傳遞到system
沒有任何問題,所以你的原始代碼:
string parameters = "Doug";
system("ps -ef|grep " + parameters);
...編譯和運行就好了。
在將字符串傳遞給shell之前,使用帶有串聯字符串(command + parameters)的c_str() – venki421 2014-09-29 18:46:28