QString轉換為char 時出現的問題

2021-08-05 00:00:01 字數 1369 閱讀 2539

這幾天嘗試用qt進行程式設計,出現了不重複出現,而且毫無規律的bug,最後查出來是在qstring轉換為char *時出現的問題

第一次使用qt,所以在寫**時,採用的如下寫法:

qstring teststring1 = 「100011」, teststring2 = 「110000」;

char *arr_1 = teststring.tolatin1().data();

char *arr_2 = teststring.tolatin1().data();

隨後在程式執行過程中出現bug,於是啟用qt單步除錯,結果:

在此種qt的單步跟蹤顯示值的介面,arr_1陣列的值顯示為110000(應該為100011)

我進行測試:

qstring teststring1 = 「100011」, teststring2 = 「110000」;

char *arr_1 = teststring.tolatin1().data();

for(int k(0); k < len; k++) //len 為之前定義的陣列長度

std::cout<

得到arr_1輸出為: 100011

正確輸出

改變順序測試:

qstring teststring1 = 「100011」, teststring2 = 「110000」;

char *arr_1 = teststring.tolatin1().data();

char *arr_2 = teststring.tolatin1().data();

for(int k(0); k < len; k++)

std::cout<

得到arr_1輸出為: 110000

將arr_2轉換為char *後,arr_1的值變為跟arr_2一樣,從而出現bug

將qstring轉換為char * 時必須採用如下格式:

qstring teststring1 = 「100011」, teststring2 = 「110000」;

qbytearray temparray = teststring2.tolatin1();

char *arr_1 = temparray.data();

temparray = teststring2.tolatin1();

char *arr_2 = temparray.data();

連著寫的轉換方法會出現無法預知的錯誤 切記

qt的偵錯程式真的不好用......欲哭無淚

將QString轉換為char

官方說明 注意在呼叫qbytearray.data 之前,必須要先顯示儲存這個bytearray。像這樣const char c str2 str2.tolatin1 data 會使程式崩潰,因為qbytearray沒有被儲存,呼叫data 前是不存在的,必須先顯式呼叫一次tolatin1 再呼叫d...

Qt中將QString轉換為char 或者相反

1.將qstring轉換為std string 可以通過qstring的成員函式tostdstring qstring qstr 123 std string str qstr.tostdstring 2.將qstring轉換為char 或者相反 直接轉換不行,因為qstring沒有提供直接的成員函...

怎樣把QString轉換為char 或者相反?

這個問題其實也屬於老生常談了。也有不少朋友聊過。我這裡把它總結一下吧。1.從qstring轉換為char 要實現把乙個qstring轉換為char 一般遵循這樣的步驟 第一步,對該qstring物件呼叫qstring的tolatin1 方法,以獲得該字串的latin1值。它將返回乙個qbytearr...