备注

未能遵守存储区域不重叠的要求一直是造成重大错误的根源。 (POSIX和C标准明确指出,使用具有重叠区域的memcpy()会产生未定义的行为。)最值得注意的是,在glibc 2.13中,某些平台(包括x86-64)上的memcpy()性能优化包括更改字节顺序从src复制到了dest。

此更改显示了执行重叠区域复制的许多应用程序中的损坏。在以前的实现中,字节的复制顺序偶然地隐藏了该错误,当复制顺序相反时,该错误就会显示出来。在glibc 2.14中,添加了版本控制符号,以便旧的二进制文件(即,与2.14之前的glibc版本链接的二进制文件)采用memcpy()实现,可以安全处理重叠缓冲区情况(通过提供"较旧"的memcpy()实现)被别名为memmove(3))。

遵循规范

POSIX.1-2001,POSIX.1-2008,C89,C99,SVr4、4.3BSD。

说明

memcpy()函数将n个字节从存储区src复制到存储区dest。存储区域不得重叠。如果内存区域确实重叠,请使用memmove(3)。

另外参见

bcopy(3),bstring(3),memccpy(3),memmove(3),mempcpy(3),strcpy(3),strncpy(3),wmemcpy(3)

语法

#include <string.h>

void *memcpy(void *dest, const void *src, size_t n);

出版信息

这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/

名称

memcpy-复制存储区

属性

有关本节中使用的术语的说明,请参见attribute(7)。

InterfaceAttributeValue
memcpy()Thread safetyMT-Safe
MEMCPY - Linux手册页

Linux程序员手册 第3部分
更新日期: 2017-09-15

返回值

memcpy()函数返回一个指向dest的指针。

日期:2019-08-20 18:00:52 来源:oir作者:oir