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;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章