【发布时间】:2015-05-28 12:35:52
【问题描述】:
将0传递给memcpy()是否有问题:
memcpy(dest, src, 0)
请注意,在我的代码中,我使用的是变量而不是 0,它有时可以计算为 0。
【问题讨论】:
-
当然可以
将0传递给memcpy()是否有问题:
memcpy(dest, src, 0)
请注意,在我的代码中,我使用的是变量而不是 0,它有时可以计算为 0。
【问题讨论】:
正如人们可能从一个健全的界面所期望的那样,零是一个有效的大小,并且不会导致任何事情发生。 C99 7.21.1/2 中各种字符串处理函数(包括memcpy)的规范特别允许这样做:
声明为
size_t n的参数指定函数数组的长度,n在调用该函数时可以具有零值。 [...] 在这样的调用中,定位字符的函数找不到任何出现,比较两个字符序列的函数返回零,复制字符的函数复制零个字符。
【讨论】:
dest和src必须是有效的指针,即使是n == 0,所以它们不能为空。
是的,完全没问题。 memcpy 的唯一限制是内存区域不能重叠。
【讨论】:
dest和src是有效指针的限制,这意味着它们不能为空。见 7.23.1 和 7.1.4
dest 必须至少与n 一样大)。但你说得对,n 不为零是没有限制的。