QSsortingng to char * conversion

J’essayais de convertir un QSsortingng en type char * par les méthodes suivantes, mais elles ne semblent pas fonctionner.

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

Pouvez-vous élaborer le possible défaut avec cette méthode ou donner une autre méthode?

    Eh bien, la FAQ Qt dit:

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

    Alors peut-être avez-vous d’autres problèmes. Comment cela fonctionne-t-il exactement?

    Peut être

    my_qssortingng.toStdSsortingng().c_str();

    ou plus sûr, comme le souligne Federico:

     std::ssortingng str = my_qssortingng.toStdSsortingng(); const char* p = str.c_str(); 

    C’est loin d’être optimal, mais fera le travail.

    Le moyen le plus simple de convertir un QSsortingng en char * est qPrintable (const QSsortingng & str) , qui est une macro qui s’étend à str.toLocal8Bit().constData() .

    La réponse de David fonctionne bien si vous l’utilisez uniquement pour la sortie vers un fichier ou l’affichage à l’écran, mais si une fonction ou une bibliothèque nécessite un caractère * pour l’parsing, cette méthode fonctionne mieux:

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

    Votre chaîne peut contenir des caractères non Latin1, ce qui conduit à des données non définies. Cela dépend de ce que vous entendez par “ça ne semble pas fonctionner”.

    la solution correcte serait comme ça

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

    ÉDITÉ

    cette façon fonctionne aussi

     QSsortingng str ("Something"); char* ch = str.toStdSsortingng().C_str();