Conversión de QString a char *

Intenté convertir un QString en un tipo * por los siguientes métodos, pero parece que no funcionan.

//QLineEdit *line=new QLineEdit();{just to describe what is line here} QString temp=line->text(); char *str=(char *)malloc(10); QByteArray ba=temp.toLatin1(); strcpy(str,ba.data()); 

¿Puedes elaborar el posible error con este método o dar un método alternativo?

Bueno, las preguntas frecuentes de Qt dicen:

 int main(int argc, char **argv) { QApplication app(argc, argv); QString str1 = "Test"; QByteArray ba = str1.toLatin1(); const char *c_str2 = ba.data(); printf("str2: %s", c_str2); return app.exec(); } 

Entonces quizás estés teniendo otros problemas. ¿Cómo exactamente esto no funciona?

Tal vez

my_qstring.toStdString().c_str();

o más seguro, como señala Federico:

 std::string str = my_qstring.toStdString(); const char* p = str.c_str(); 

Está lejos de ser óptimo, pero hará el trabajo.

La forma más sencilla de convertir un QString en char * es qPrintable (const QString & str) , que es una macro que se expande a str.toLocal8Bit().constData() .

La respuesta de David funciona bien si solo la está usando para enviar a un archivo o mostrar en la pantalla, pero si una función o biblioteca requiere un * char * para el análisis, este método funciona mejor:

 // copy QString to char* QString filename = "C:\dev\file.xml"; char* cstr; string fname = filename.toStdString(); cstr = new char [fname.size()+1]; strcpy( cstr, fname.c_str() ); // function that requires a char* parameter parseXML(cstr); 

Su cadena puede contener caracteres no latinos1, lo que conduce a datos no definidos. Depende de lo que quieras decir con “parece que no funciona”.

la solución correcta sería así

  QString k; k = "CRAZYYYQT"; char ab[16]; sprintf(ab,"%s",(const char *)((QByteArray)(k.toLatin1()).data()) ); sprintf(ab,"%s",(const char *)((QByteArray)(k.toStdString()).data())); sprintf(ab,"%s",(const char *)k.toStdString().c_str() ); qDebug()<<"--->"< 

EDITADO

de esta manera también funciona

 QString str ("Something"); char* ch = str.toStdString().C_str();