如果缓冲区中有足够的空间,则将整数复制到缓冲区

时间:2011-04-07 15:51:56

标签: c copy integer buffer

如果缓冲区有足够的空间,我有一个将整数复制到缓冲区的函数

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

问题是它总是将值复制到缓冲区,即使maxbytes太小也是如此。 我想知道为什么会这样?

2 个答案:

答案 0 :(得分:9)

sizeof(val)是无符号值。 int - unsigned生成无符号值。

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

答案 1 :(得分:3)

sizeof(val)的类型为size_t,未签名。因此,maxbytes-sizeof(val)也将是无符号的,因此始终为>= 0

您应该尝试maxbytes-(int)sizeof(val)