如下代碼將QString轉換爲char *:
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();
}
在調用data()之前,請先將QString保存到QByteArray中,如果直接使用如下方式:
constchar*c_str2 = str2.toLocal8Bit().data();
可能導致程序崩潰,因爲此時QByteArray對象並不存在,toLocal8Bit()只是返回了一個臨時的對象,很快就會銷燬,導致c_str2引用了錯誤的內存。
如下代碼將char *轉換爲QString:
QStringstring = QString(QLatin1String(c_str2));
QStringstring = QString::fromLocal8Bit(c_str2);
如果包含中文,請使用第二種方式,避免亂碼。
使用printf打印QString字符串,可採用如下方式:
printf("str2: %s",qPrintable(str1));
將QByteArray拷貝到char的內存中時,注意,在爲char指針非配內存時,需要爲QByteArray對象的結束符’\0’也分配內存,如下代碼可能導致程序崩潰:
QString tmp = "test";
QByteArray text = tmp.toLocal8Bit();
char *data = new char[text.size()]
strcpy(data, text.data());
delete [] data;
正確方式:
QString tmp = "test";
QByteArray text = tmp.toLocal8Bit();
char *data = new char[text.size() + 1]
strcpy(data, text.data());
delete [] data;