2011-04-07 215 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))