c++ - length - no se puede convertir ''std:: basic_string<char>'' a ''const char*'' para el argumento ''1'' a ''int system(const char*)''
string to char c++ (5)
Me sale este error: "operandos no válidos de los tipos ''const char *'' y ''const char [6]'' to binary ''operator +''" cuando intento compilar mi script. Aquí debería estar el error:
string name = "john";
system(" quickscan.exe resolution 300 selectscanner jpg showui showprogress filename ''"+name+".jpg''");
Como muestran todas las demás respuestas, el problema es que agregar una std::string
y const char*
usando +
da como resultado una std::string
, mientras que system()
espera una const char*
. Y la solución es usar c_str()
. Sin embargo, también puedes hacerlo sin un temporal:
string name = "john";
system((" quickscan.exe resolution 300 selectscanner jpg showui showprogress filename ''"+name+".jpg''").c_str());
El tipo de expresion
" quickscan.exe resolution 300 selectscanner jpg showui showprogress filename ''"+name+".jpg''"
es std::string
. Sin embargo el sistema de funciones tiene declaración
int system(const char *s);
es decir, acepta un argumnet de tipo const char *
No hay un operador de conversión que pueda convertir implícitamente un objeto de tipo std::string
a objeto de tipo const char *
.
Sin embargo, la clase std::string
tiene dos funciones que hacen esta conversión explícitamente. Son c_str()
y data()
(el último solo se puede usar con un compilador que admita C ++ 11)
Para que puedas escribir
string name = "john";
system( (" quickscan.exe resolution 300 selectscanner jpg showui showprogress filename ''"+name+".jpg''").c_str() );
No hay necesidad de usar una variable intermedia para la expresión.
La adición de una cadena literal con un std::string
produce otro std::string
. system
espera un const char*
. Puedes usar std::string::c_str()
para eso:
string name = "john";
string tmp = " quickscan.exe resolution 300 selectscanner jpg showui showprogress filename ''"+name+".jpg''"
system(tmp.c_str());
La función del sistema requiere const char *, y su expresión es del tipo std::string
. Deberías escribir
string name = "john";
string system_str = " quickscan.exe resolution 300 selectscanner jpg showui showprogress filename ''"+name+".jpg''";
system(system_str.c_str ());
std::string + const char*
da como resultado otro std::string
. system
no toma un std::string
, y no puede concatenar char*
''s con el operador +
. Si quieres usar el código de esta manera necesitarás:
std::string name = "john";
std::string tmp =
"quickscan.exe resolution 300 selectscanner jpg showui showprogress filename ''" +
name + ".jpg''";
system(tmp.c_str());