2013-07-24 56 views
0

我無法讓system()在字符串變量中運行命令。將字符串變量放入系統時出錯()

ostringstream convert; 
convert << getSeconds(hours); 
string seconds = convert.str(); /* converts the output of 'getSeconds()' into 
             a string and puts it into 'seconds' */ 

string cmd = "shutdown /s /t " + seconds; 

system(cmd); 

getSeconds()只需要一個小時的整數,將其轉換爲秒,並返回一個以秒爲單位的整數。一切運行良好,沒有錯誤,直到它達到system(cmd);。然後,編譯器吐出了這個錯誤:

error: cannot convert 'std::string {aka std::basic_string<char>}' to 
'const char*' for argument '1' to 'int system(const char*)' 

這裏是我的包括:

#include <iostream> 
#include <string> 
#include <cstdlib> 
#include <sstream> 
+2

'system(cmd.c_str());' – Borgleader

+0

當它是答案時,爲什麼不把它當作答案呢? –

回答

2

系統採用C字符串不是的std :: string,所以你必須先調用c_str功能。

system(cmd.c_str()); 
4

我知道這已經被評論回答了,但沒有真正解釋說:

system函數是C函數。它不會「理解」C++風格的字符串。爲此,您將需要使用c_str()函數。換句話說,你需要system(cmd.c_str());

這適用於C++仍然可用的大量C風格函數,因爲C++的主要特性之一是您仍然可以在C++中使用傳統的C代碼(大部分)。所以,對於幾乎所有需要字符串的C風格函數 - printf("cmd=%s", cmd.c_str());都會打印出您的命令。

這將是possibe編寫自己的包裝函數:

int system(const std::string &cmd) 
{ 
    return system(cmd.c_str()); 
} 

現在,你的代碼的其餘部分可以使用system用常規的C++風格的字符串。

相關問題