【发布时间】:2017-08-22 14:52:45
【问题描述】:
我正在尝试理解 C 库 <string.h> 中定义的函数 memcpy()
语法:void *memcpy(void*dst,const void*src,size_t n);
我知道这个函数是用来将src指针指向的内存内容复制到dst指针指向的位置,并返回dst指针指向的地址。
我无法理解以下关于memcpy() 的重要声明:
- 使用
memcpy()时,内存地址不能重叠,如果重叠则memcpy()未定义。
另一个查询是:
传递给函数第三个参数的值,即size_t n 始终是整数值吗?
【问题讨论】:
-
当标准说某些行为是未定义的,这意味着en.wikipedia.org/wiki/Undefined_behavior
-
这个人告诉你,如果
src+n地址重叠dstdst中的最终数据可以是任何东西。 -
对于
size_t看看this SO post -
“重叠”这个词你不懂吗?
-
这与内存泄漏无关。如果你在重叠地址使用
memcpy,你只会丢失一些数据。