因为 copy的语义是操作后新目标和旧源内容相同且旧源的内容保持不变。 move的语义是操作后新目标和旧源内容相同且旧源的内容不一定保持不变。 所以 在源和目标内存覆盖的情况下,根本不可能实现copy!只能实现move
我想楼主的问题不是越界应该是 char * p = malloc(1024); memcpy(p + 2, p, 500); strcpy(p + 2, p); 对于重叠,开发人员应该非常清楚,所谓的“随机性"就是你无法确定 dst 的值 比如 "abcdefg" 按字节处理 memcpy(p + 2, p, 8) 可能会变成 "abababab" 但是某些优化的 memcpy 可能按 4 字节拷贝,你就很难想象最终结果是什么 库函数的实现不是唯一的,所以结果是一个不可定义的 开发人员理解库函数能更好的使用,但是不要惧怕使用
[quote=引用 6 楼 kaiandshan 的回复:] 不好意思,都是“随机性”这个词惹的祸,如果des和src指向不同的空间,这些函数都可以使用;如果指向同一段内存,就会存在空间覆盖的问题,这种情况在函数使用者看来也是可以预见的。
[quote=引用 10 楼 zhao4zhong1 的回复:] 因为 copy的语义是操作后新目标和旧源内容相同且旧源的内容保持不变。 move的语义是操作后新目标和旧源内容相同且旧源的内容不一定保持不变。 所以 在源和目标内存覆盖的情况下,根本不可能实现copy!只能实现move
不好意思,都是“随机性”这个词惹的祸,如果des和src指向不同的空间,这些函数都可以使用;如果指向同一段内存,就会存在空间覆盖的问题,这种情况在函数使用者看来也是可以预见的。
69,377
社区成员
243,076
社区内容
加载中
试试用AI创作助手写篇文章吧