QString到char *转换

我试图通过以下方法将QString转换为char *types,但它们似乎不工作。

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

你能否用这种方法来阐述可能的缺陷,或者给出一种替代方法?

那么, Qt FAQ说:

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

所以也许你有其他问题。 这究竟是如何工作的?

也许

my_qstring.toStdString().c_str();

或更安全,正如费德里科所指出的那样:

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

这是远远优化,但会做的工作。

将QString转换为char *最简单的方法是qPrintable(const QString&str) ,它是一个扩展到str.toLocal8Bit().constData()的macros。

大卫的答案工作正常,如果你只用它输出到一个文件或显示在屏幕上,但如果一个函数或库需要char *parsing,则此方法效果最好:

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

您的string可能包含非Latin1字符,导致未定义的数据。 这取决于你的意思是“它似乎没有工作”。

正确的解决scheme就是这样

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