[英]What does overlapping of buffer mean in memcpy function definition?
memcpy 的 function 定义如下 -
memcpy function 将 size 字节从 object 开始复制到 object 开始 at to。 如果两个 arrays 往来重叠,则此 function 的行为未定义; 如果可能重叠,请改用 memmove。
arrays“to”和“from”重叠是什么意思? 我们什么时候说两个数组重叠?
通常,我们认为在场景中有些东西是重叠的——“to”数组从地址 1000 开始,大小为 100,“from”数组从地址 1050 开始,大小为 100。
但这不可能发生,因为系统没有为 1050 处的“from”数组分配 memory,因为“to”数组已经分配了 1000 到 1100 之间的位置。
这将是一个重叠:
char arr[10];
// Code that does something
memcpy(&arr[0], &arr[3], 5);
但这不会:
memcpy(&arr[0], &arr[3], 2);
如果您有两个 char 指针p
和q
并调用memcpy(p, q, size)
,则重叠意味着至少有一个字节同时属于区间[p,p+size]
和[q,q+size]
。 在上面的示例中,这些元素是arr[3]
和arr[4]
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.