【问题标题】:Is this allowed: memcpy(dest, src, 0) [duplicate]这是否允许:memcpy(dest,src,0)[重复]
【发布时间】:2015-05-28 12:35:52
【问题描述】:

0传递给memcpy()是否有问题:

 memcpy(dest, src, 0)

请注意,在我的代码中,我使用的是变量而不是 0,它有时可以计算为 0

【问题讨论】:

  • 当然可以

标签: c++ c


【解决方案1】:

正如人们可能从一个健全的界面所期望的那样,零是一个有效的大小,并且不会导致任何事情发生。 C99 7.21.1/2 中各种字符串处理函数(包括memcpy)的规范特别允许这样做:

声明为size_t n 的参数指定函数数组的长度,n 在调用该函数时可以具有零值。 [...] 在这样的调用中,定位字符的函数找不到任何出现,比较两个字符序列的函数返回零,复制字符的函数复制零个字符

【讨论】:

  • 但是destsrc必须是有效的指针,即使是n == 0,所以它们不能为空。
【解决方案2】:

是的,完全没问题。 memcpy 的唯一限制是内存区域不能重叠。

【讨论】:

  • 这不是真的,还有destsrc是有效指针的限制,这意味着它们不能为空。见 7.23.1 和 7.1.4
  • 这不是唯一的限制(例如,两个指针都必须有效,dest 必须至少与n 一样大)。但你说得对,n 不为零是没有限制的。
猜你喜欢
  • 1970-01-01
  • 2020-03-10
  • 2011-01-24
  • 2016-10-13
  • 2013-08-22
  • 2021-10-10
  • 2019-07-24
相关资源
最近更新 更多