memcpy_s, wmemcpy_s
复制缓冲区之间的字节。这些是 memcpy, wmemcpy 的版本与安全增强的 CRT中的安全功能如中所述。
errno_t memcpy_s(
void *dest,
size_t numberOfElements,
const void *src,
size_t count
);
errno_t wmemcpy_s(
wchar_t *dest,
size_t numberOfElements,
const wchar_t *src,
size_t count
);
参数
dest
新的缓冲区。numberOfElements
目标缓冲区的大小。src
要复制的缓冲区。count
字符数。的副本。
返回值
零,如果成功;在失败的错误代码。
错误状态
dest |
numberOfElements |
src |
返回值 |
dest内容 |
---|---|---|---|---|
NULL |
任何 |
任何 |
EINVAL |
不修改 |
任何 |
任何 |
NULL |
EINVAL |
dest 零 |
任何 |
AMP_LT count |
任何 |
ERANGE |
dest 零 |
备注
memcpy_s 复制 src 的 count 字节到 dest; wmemcpy_s 复制 count 宽字符 (两个字节)。如果源和目标重叠, memcpy_s 行为不确定。使用 memmove_s 处理重叠区域。
这些功能验证其参数。如果 dest 或 src 是 null 指针,或者 numberOfElements 为缓冲区太小,这些函数调用的参数无效处理程序,如 参数验证所述。如果执行允许继续,这些函数返回 EINVAL 并将 errno 到 EINVAL。
要求
实例 |
必需的头 |
---|---|
memcpy_s |
memory.h 或 string.h |
wmemcpy_s |
wchar.h |
有关其他的兼容性信息,请参见中介绍的 兼容性 。
示例
// crt_memcpy_s.c
// Copy memory in a more secure way.
#include <memory.h>
#include <stdio.h>
int main()
{
int a1[10], a2[100], i;
errno_t err;
// Populate a2 with squares of integers
for (i = 0; i < 100; i++)
{
a2[i] = i*i;
}
// Tell memcpy_s to copy 10 ints (40 bytes), giving
// the size of the a1 array (also 40 bytes).
err = memcpy_s(a1, sizeof(a1), a2, 10 * sizeof (int) );
if (err)
{
printf("Error executing memcpy_s.\n");
}
else
{
for (i = 0; i < 10; i++)
printf("%d ", a1[i]);
}
printf("\n");
}
.NET Framework 等效项
不适用。若要调用标准 C 函数,请使用 PInvoke。有关更多信息,请参见 平台调用示例。
请参见
参考
strncpy, _strncpy_l, wcsncpy, _wcsncpy_l, _mbsncpy, _mbsncpy_l
strncpy_s, _strncpy_s_l, wcsncpy_s, _wcsncpy_s_l, _mbsncpy_s, _mbsncpy_s_l