2011-04-07 155 views
1

足夠的空間,我有一個函數整數複製到緩衝區,如果緩衝區有足夠的空間複製整數緩衝區如果緩衝區在C

void copy_int(int val, void *buf, int maxbytes) 
{ 
    if (maxbytes-sizeof(val) >= 0) 
     mempcy(buf, (void *) &val, sizeof(val)); 
} 

問題是,它總是值複製到緩衝區,即使最大字節太小。 我想知道這是爲什麼?

+2

打開你的編譯器警告和**介意他們** – pmg 2011-04-07 15:56:42

回答

3

sizeof(val)是類型size_t,它是無符號的。因此,maxbytes-sizeof(val)也將是無符號的,因此總是>= 0

您應該嘗試maxbytes-(int)sizeof(val)

9

sizeof(val)是一個無符號值。 int - unsigned產生一個無符號的值。

用途:if (maxbytes >= sizeof(val))