2014-02-05 129 views

回答

25

該類型的表達式

" quickscan.exe resolution 300 selectscanner jpg showui showprogress filename '"+name+".jpg'" 

std::string。但是功能系統具有聲明

int system(const char *s); 

這是它接受類型const char *

沒有將隱式轉換std::string類型的對象const char *類型轉換成對象操作的argumnet。

儘管如此,類std::string有兩個明確進行此轉換的函數。他們c_str()data()(最後只能用於與支持C++編譯器11)

所以,你可以寫

string name = "john"; 

system((" quickscan.exe resolution 300 selectscanner jpg showui showprogress filename '"+name+".jpg'").c_str()); 

沒有必要使用一箇中間變量表達式。

9

std::string + const char*導致另一個std::stringsystem不包含std::string,並且不能將char*+運算符連接。如果你想使用這樣的代碼,你將需要:

std::string name = "john"; 
std::string tmp = 
    "quickscan.exe resolution 300 selectscanner jpg showui showprogress filename '" + 
    name + ".jpg'"; 
system(tmp.c_str()); 

std::string operator+(const char*)

2

添加一個字符串與std::string的產生另一個std::stringsystem需要const char*。您可以使用std::string::c_str()爲:

string name = "john"; 
string tmp = " quickscan.exe resolution 300 selectscanner jpg showui showprogress filename '"+name+".jpg'" 
system(tmp.c_str()); 
1

系統功能要求爲const char *,你的表情是類型std::string的。你應該寫

string name = "john"; 
string system_str = " quickscan.exe resolution 300 selectscanner jpg showui showprogress filename '"+name+".jpg'"; 
system(system_str.c_str()); 
3

由於所有其他的答案表明,問題是,增加了std::string和使用+導致std::string一個const char*,而system()期望一個const char*。解決方案是使用c_str()。然而,你也可以不用臨時:

string name = "john"; 
system((" quickscan.exe resolution 300 selectscanner jpg showui showprogress filename '"+name+".jpg'").c_str()); 
相關問題