如下代码将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;