QString 和 char *之间如何如何转换?

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

你可能感兴趣的:(QString 和 char *之间如何如何转换?)