如果缓冲区有足够的空间,我有一个将整数复制到缓冲区的函数
void copy_int(int val, void *buf, int maxbytes)
{
if (maxbytes-sizeof(val) >= 0)
mempcy(buf, (void *) &val, sizeof(val));
}
问题是它总是将值复制到缓冲区,即使maxbytes太小也是如此。 我想知道为什么会这样?
答案 0 :(得分:9)
sizeof(val)
是无符号值。 int
- unsigned
生成无符号值。
使用:if (maxbytes >= sizeof(val))
答案 1 :(得分:3)
sizeof(val)
的类型为size_t
,未签名。因此,maxbytes-sizeof(val)
也将是无符号的,因此始终为>= 0
。
您应该尝试maxbytes-(int)sizeof(val)
。