J'essayais de convertir un QString en type char * à l'aide des méthodes suivantes, mais elles ne semblent pas fonctionner.
//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());
Pouvez-vous élaborer le défaut possible avec cette méthode, ou donner une autre méthode?
Eh bien, le Qt FAQ dit:
int main(int argc, char **argv)
{
QApplication app(argc, argv);
QString str1 = "Test";
QByteArray ba = str1.toLocal8Bit();
const char *c_str2 = ba.data();
printf("str2: %s", c_str2);
return app.exec();
}
Alors peut-être que vous rencontrez d'autres problèmes. Comment ça marche pas?
Peut être
my_qstring.toStdString().c_str();
ou plus sûr, comme le souligne Federico:
std::string str = my_qstring.toStdString();
const char* p = str.c_str();
C'est loin d'être optimal, mais fera le travail.
Le moyen le plus simple de convertir un QString en char * est qPrintable (const QString & str) , , Qui est une macro passant à str.toLocal8Bit().constData()
.
La réponse de David fonctionne bien si vous l'utilisez uniquement pour la sortie dans un fichier ou pour l'affichage à l'écran, mais si une fonction ou une bibliothèque nécessite un caractère * pour l'analyse, cette méthode fonctionne mieux:
// 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);
ÉDITÉ
ça marche aussi
QString str ("Something");
char* ch = str.toStdString().C_str();
Votre chaîne peut contenir des caractères autres que Latin1, ce qui conduit à des données non définies. Cela dépend de ce que vous entendez par "cela ne semble pas fonctionner".
la solution correcte serait comme ça
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()<<"--->"<<ab<<"<---";
Si votre chaîne contient des caractères non-ASCII, il est préférable de le faire comme suit: s.toUtf8().data()
(ou s->toUtf8().data()
)