2014-02-05 12 views

Antwort

25

Die Art des Ausdrucks

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

std::string ist. Allerdings Funktionssystem Erklärung hat

int system(const char *s); 

, das ist es eine argumnet vom Typ const char *

Es gibt keinen Konvertierungsoperator übernimmt die std::string implizit ein Objekt vom Typ umwandeln würde const char * vom Typ zu widersprechen.

Trotzdem Klasse std::string hat zwei Funktionen, die diese Konvertierung explizit vornehmen. Sie sind c_str() und data() (die letzte nur mit Compiler verwendet werden, die 11 C++ unterstützt)

So können Sie

schreiben
string name = "john"; 

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

Es gibt keine Notwendigkeit, eine Zwischengröße für den Ausdruck zu verwenden.

9

std::string + const char* Ergebnisse in einem anderen std::string. system dauert keine std::string, und Sie können char* mit dem Operator + nicht verketten. Wenn Sie den Code auf diese Weise verwenden möchten, benötigen Sie:

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

Siehe std::string operator+(const char*)

2

Die Zugabe eines Stringliteral mit einem std::stringstd::string eine andere ergibt. system erwartet eine const char*. Sie können std::string::c_str() dafür verwenden:

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

Die Systemfunktion erfordert const char * und Ihr Ausdruck ist von dem Typ std::string. Sie sollten

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

schreiben Da alle anderen Antworten zeigen, das Problem ist, dass ein std::string Hinzufügen und const char* mit + führt zu einer std::string, während system() eine const char* erwartet. Und die Lösung ist c_str() zu verwenden. Allerdings können Sie es auch tun, ohne eine temporäre:

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