2010-06-24 97 views
0

在C中,如果我提供一個有符號整數(特別是一個負整數)作爲memcpy函數的第三個參數,會發生什麼?在C中,memcpy如何處理帶符號的整數參數?

實施例:

memcpy(destBuf, source, -100*sizeof(source)) 

可否的-100*sizeof(source)結果通過的memcpy被解釋爲無符號?

謝謝!

回答

7

最後一個參數是無符號的。所以通過做-100 * sizeof(源)你會得到一個巨大的數字(這將環繞,即溢出)。

這相當於「4,294,967,196 * sizeof(source)」。

編輯:其實這是我剛剛意識到的錯誤。它會做-100 * sizeof(源),然後將其轉換爲無符號。例如,如果sizeof(source)是4,那麼它會將-400轉換爲無符號並給你0xFFFFFE70(4,294,966,896)。

+0

如果他們的產品對於無符號整數變得太大會發生什麼? – ultrajohn 2010-06-24 09:27:23

+0

它將環繞。即0xFFFFFFFF + 0x1 = 0x00000000 – Goz 2010-06-24 09:30:05

+1

具體來說,它會將其轉換爲'size_t',以便該值將轉換爲'SIZE_MAX + 1 - 100 * sizeof(source)'。 – caf 2010-06-24 12:24:24

2

不,你會複製大量的數據,因爲-100被看作是一個無符號數是一個巨大的無符號數,就像FFFFFF9C,這是40億左右......事實上,你將它乘以sizeof (源)可能會減少一點...

相關問題