繁体   English   中英

memcpy function 定义中缓冲区的重叠是什么意思?

[英]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 指针pq并调用memcpy(p, q, size) ,则重叠意味着至少有一个字节同时属于区间[p,p+size][q,q+size] 在上面的示例中,这些元素是arr[3]arr[4]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM