memcpywmemcpy

在缓冲区之间复制字节。 提供这些函数的更安全版本;请参阅 memcpy_swmemcpy_s

语法

void *memcpy(
   void *dest,
   const void *src,
   size_t count
);
wchar_t *wmemcpy(
   wchar_t *dest,
   const wchar_t *src,
   size_t count
);

参数

dest
新缓冲区。

src
从中进行复制操作的缓冲区。

count
要复制的字符数。

返回值

dest 的值。

备注

memcpysrccount 个字节复制到 dest 中;wmemcpy 复制 count 个宽字符。 如果源和目标区域重叠,则 memcpy 的行为是未定义的。 使用 memmove 处理重叠区域。

重要

确保目标缓冲区足够大,能够容纳所复制的字符数。 有关详细信息,请参阅避免缓冲区溢出

重要

由于因不恰当使用 memcpy 而跟踪到了过多的缓冲区溢出以及因此产生的潜在安全漏洞,因此安全开发生命周期 (SDL) 将此函数列在“禁用”函数中。 你可能会发现一些 VC++ 库类仍然继续使用 memcpy。 此外,你还可能发现 VC++ 编译优化器有时会向 memcpy 发出调用。 Visual C++ 产品的开发需符合 SDL 过程,因此对此禁止函数的使用进行了仔细评估。 在库使用情况下,已经对调用进行了仔细审查,确保通过这些调用不会产生缓冲区溢出。 对于编译器,某些代码模式有时会被视为与 memcpy 模式相同,因此会被函数的调用替代。 在一些情况下,使用 memcpy 安全性并不比原始指令差,它们只是优化了对 memcpy 性能调整函数的调用。 与使用“安全”CRT 函数不保证安全性一样(仅难以加重不安全性),使用“禁止”函数并不能保证不出现危险(需更严格的审查以确保安全性)。

由于已经仔细审查了 VC++ 编译器和库对 memcpy 的使用,因此允许在不符合 SDL 的代码中出现这些调用。 应用程序源代码中引用的 memcpy 调用只有在安全专家审查了其使用时才符合 SDL。

仅当常量 _CRT_SECURE_DEPRECATE_MEMORY#include 语句之前定义时,才会弃用 memcpywmemcpy 函数,如以下示例所示:

#define _CRT_SECURE_DEPRECATE_MEMORY
#include <memory.h>

#define _CRT_SECURE_DEPRECATE_MEMORY
#include <wchar.h>

要求

例程 必需的标头
memcpy <memory.h><string.h>
wmemcpy <wchar.h>

有关兼容性的详细信息,请参阅 兼容性

示例

有关如何使用 memcpy 的示例,请参阅 memmove

另请参阅

缓冲区操作
_memccpy
memchrwmemchr
memcmpwmemcmp
memmovewmemmove
memsetwmemset
strcpy_s, wcscpy_s, _mbscpy_s
strncpy_s_strncpy_s_lwcsncpy_s_wcsncpy_s_l_mbsncpy_s_mbsncpy_s_l