QString转化为const char *出现乱码问题
???? 對于Qt項(xiàng)目開發(fā)中,常常會遇到QString和const char*的轉(zhuǎn)化問題,Qt也提供了響應(yīng)的API接口,可以把QString轉(zhuǎn)化為QByteArray,然后再轉(zhuǎn)化為const char *,具體代碼如下:
QString string("helloWorld"); const char *str = string.toLatin1().data();??? 但是調(diào)用接口才發(fā)現(xiàn),打印str時有時能夠顯示得到helloWorld有時候得到的卻是亂碼,通過查詢文檔發(fā)現(xiàn)調(diào)用toLatin1的過程中是把QString中的內(nèi)容放到QByteArray中存儲起來,如果再調(diào)用data的接口,放到QByteArray中的數(shù)據(jù)則會被清除(類似于棧變量析構(gòu)),因此將上述代碼變化一下則可以正確轉(zhuǎn)化:
QString string("helloWorld"); QByteArray array = string.toLatin1(); const char *str = array.data();??? 但是存在一個問題,如果是這樣的場景,如果const char*存在的生命周期比QByteArray要長的話,還是會出現(xiàn)const char*中的數(shù)據(jù)會被釋放,const char*的數(shù)據(jù)亂碼的情況,解決的方法可以額外深拷貝出一份數(shù)據(jù)保存下來或者用一個數(shù)組保存數(shù)據(jù)(如果是在對象中,將數(shù)組定義成成員變量就行了)
總結(jié)
以上是生活随笔為你收集整理的QString转化为const char *出现乱码问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 哈利波特魔法觉醒弗立维回响强不强
- 下一篇: 中医可以看好卵巢早衰吗