簡體   English   中英

Qt的char指針數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM