%>
在缓冲区之间复制字节。 提供这些函数的更安全版本;请参阅 memcpy_s
、wmemcpy_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
的值。
备注
memcpy
从 src
将 count
个字节复制到 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
语句之前定义时,才会弃用 memcpy
和 wmemcpy
函数,如以下示例所示:
#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
。