pointer length c++ string char system

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());

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