在C中,如果我提供一個有符號整數(特別是一個負整數)作爲memcpy函數的第三個參數,會發生什麼?在C中,memcpy如何處理帶符號的整數參數?
實施例:
memcpy(destBuf, source, -100*sizeof(source))
可否的-100*sizeof(source)
結果通過的memcpy被解釋爲無符號?
謝謝!
在C中,如果我提供一個有符號整數(特別是一個負整數)作爲memcpy函數的第三個參數,會發生什麼?在C中,memcpy如何處理帶符號的整數參數?
實施例:
memcpy(destBuf, source, -100*sizeof(source))
可否的-100*sizeof(source)
結果通過的memcpy被解釋爲無符號?
謝謝!
最後一個參數是無符號的。所以通過做-100 * sizeof(源)你會得到一個巨大的數字(這將環繞,即溢出)。
這相當於「4,294,967,196 * sizeof(source)」。
編輯:其實這是我剛剛意識到的錯誤。它會做-100 * sizeof(源),然後將其轉換爲無符號。例如,如果sizeof(source)是4,那麼它會將-400轉換爲無符號並給你0xFFFFFE70(4,294,966,896)。
不,你會複製大量的數據,因爲-100被看作是一個無符號數是一個巨大的無符號數,就像FFFFFF9C,這是40億左右......事實上,你將它乘以sizeof (源)可能會減少一點...
如果他們的產品對於無符號整數變得太大會發生什麼? – ultrajohn 2010-06-24 09:27:23
它將環繞。即0xFFFFFFFF + 0x1 = 0x00000000 – Goz 2010-06-24 09:30:05
具體來說,它會將其轉換爲'size_t',以便該值將轉換爲'SIZE_MAX + 1 - 100 * sizeof(source)'。 – caf 2010-06-24 12:24:24