首页 > 试题广场 >

给你一个任务,写一个函数,将整数val复制到缓冲区buf中,

[问答题]

给你一个任务,写一个函数,将整数val复制到缓冲区buf中,但是只有当缓冲区中有足够可用的空间时,才执行复制。

你写的代码如下:

/* Copy integer into buffer if space is available*/
/* WARNING: The following code is buggy*/
void copy_int(int val, void *buf, int maxbytes) {
     if (maxbytes-sizeof(val) >=0)
         memcpy(buf, (void *) &val, sizeof(val));
}

这段代码使用了库函数memcpy。虽然在这里用这个函数有点刻意,因为我们只是想复制一个int,但是它说明了一种复制较大数据结构的常见方法。

你仔细地测试了这段代码后发现,哪怕maxbytes很小的时候,它也能把值复制到缓冲区中。

A. 解释为什么代码中的条件测试总是成功。提示:sizeof运算符返回类型为size_t的值。

B. 你该如何重写这个条件测试,使之工作正确。

这道题你会答吗?花几分钟告诉大家答案吧!