Domanda

Stavo cercando di convertire un QString a char * Tipo con i seguenti metodi, ma non sembra funzionare.

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

Puoi approfondire la possibile difetto con questo metodo, o dare un metodo alternativo?

È stato utile?

Soluzione

Bene, il Qt FAQ dice:

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

Quindi, forse stai avendo altri problemi. Come funziona esattamente non fa questo lavoro?

Altri suggerimenti

Forse

my_qstring.toStdString().c_str();

o più sicuro, come Federico sottolinea:

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

E 'ben lungi dall'essere ottimale, ma farà il lavoro.

Il modo più semplice per convertire un QString a char * qPrintable (const QString & str) , che è una macro espandendo a str.toLocal8Bit().constData().

La risposta di David funziona bene se si sta utilizzando solo per l'output su un file o la visualizzazione sullo schermo, ma se una funzione o una libreria richiede un char * per l'analisi, allora questo metodo funziona meglio:

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

A CURA

in questo modo funziona anche

QString str ("Something");

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

La stringa può contenere caratteri non Latin1, che porta a dati indefiniti. Dipende di che cosa si intende per "lo deosn't sembra funzionare".

La soluzione corretta sarebbe come questo

   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<<"<---";

Se la stringa contiene caratteri non-ASCII - è meglio farlo in questo modo: s.toUtf8().data() (o s->toUtf8().data())

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top