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