Qt中QString對象使用toStdString().data()會產生錯誤

來看下面一個例子:
#include <QtGui/QApplication>
#include <QString>
#include <stdio.h>
int main(int argc, char *argv[])
{
    QString m("china");
    QString n("great");

    const char *mstr = m.toStdString().data();
    printf("mstr = %s\n", mstr);
    const char *nstr = n.toStdString().data();
    printf("nstr = %s\n", nstr);

    return 0;
}

輸出結果顯而易見:
mstr = china
nstr = great

但如果我這樣寫:

#include <QtGui/QApplication>
#include <QString>
#include <stdio.h>
int main(int argc, char *argv[])
{
    QString m("china");
    QString n("great");

    const char *mstr = m.toStdString().data();    
    const char *nstr = n.toStdString().data();
    printf("mstr = %s\n", mstr);
    printf("nstr = %s\n", nstr);

    return 0;
}

答案應該是不變的,可偏偏不是這樣,答案是:
mstr = great
nstr = great

我在做畢設的時候遇到字符串輸出亂碼的問題就是這裏搞的鬼,一開始還不相信,後來就寫了這麼個小程序試了一下,果真有問題。不知道Qt中這個toStdString().data()是怎麼實現的,以後得注意了,得照着前面那種方式寫。

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