Question

Je suis en train de convertir un QString char * type par les méthodes suivantes, mais ils 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 expliquer le défaut possible avec cette méthode, ou donner une autre méthode?

Autres conseils

Peut-être

my_qstring.toStdString().c_str();

ou plus sûr, comme Federico souligne:

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

Il est loin d'être optimale, mais fera le travail.

La meilleure façon de convertir un QString char * est qPrintable (const QString & str) , qui est une macro en expansion à str.toLocal8Bit().constData().

La réponse de David fonctionne très bien si vous ne l'utilisez que pour la sortie d'un fichier ou d'afficher sur l'écran, mais si une fonction ou d'une bibliothèque a besoin d'un char * pour l'analyse, cette méthode fonctionne le 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É

Ainsi fonctionne aussi

QString str ("Something");

char* ch = str.toStdString().C_str();

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 « il deosn't semble fonctionner ».

la bonne solution serait comme ceci

   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 de cette façon: s.toUtf8().data() (ou s->toUtf8().data())

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top