[英]Qt array of char pointers
我試圖將十六進制的值存儲在字符指針數組中,並將其傳遞給另一個函數,該函數將計算十六進制值的CRC。 但是問題在於,有時輸出相同或有時pttr [0]的值為0。
這是我現在得到的結果,0xFF 0xFF。 我在這里做錯什么了嗎? 謝謝。
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
char *pttr[2];
pttr[0] = QString("0x%1").arg(155, 2, 16, QLatin1Char('0')).toLatin1().data();
pttr[1] = QString("0x%1").arg(255, 2, 16, QLatin1Char('0')).toLatin1().data();
printf("%s \n",pttr[0]);
printf("%s \n",pttr[1]);
return a.exec();
}
data
返回的數組仍歸QString
。 如果您有一個這樣的臨時QString
,它將在語句末尾銷毀,使返回的指針指向未初始化的內存。
通常,使用Qt時應將字符串保留在QString
。 如果您需要從一個char*
取出一個char*
,請在需要時進行操作,而不要初始化char*
變量。
使用的問題
char *pttr[2];
pttr[0] = QString("0x%1").arg(155, 2, 16, QLatin1Char('0')).toLatin1().data();
pttr[1] = QString("0x%1").arg(255, 2, 16, QLatin1Char('0')).toLatin1().data();
是有兩個級別的臨時對象。
QString("0x%1").arg(155, 2, 16, QLatin1Char('0'))
創建一個臨時QString
對象。
QString("0x%1").arg(155, 2, 16, QLatin1Char('0')).toLatin1()
創建一個臨時QByteArray
對象。
這些行完成執行后, pttr
最終將保持兩個懸空指針。 取消引用那些指針會導致未定義的行為。
請注意,即使
QString str("Some value");
char const* cp = str.toLatin1().constData();
是不正確的。 cp
在這種情況下也是一個懸空指針。
當需要獲得對底層char
對象的只讀訪問權限時,應保留QString
對象並使用toLatin1().constData()
。
QString str_array[2];
str_array[0] = QString("0x%1").arg(155, 2, 16, QLatin1Char('0'));
str_array[1] = QString("0x%1").arg(255, 2, 16, QLatin1Char('0'));
printf("%s \n", str_array[0].toLatin1().constData());
printf("%s \n", str_array[1].toLatin1().constData());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.