%>
在缓冲区之间复制字节。 这些函数的版本是 memcpy
、wmemcpy
,具有安全性增强功能,如 CRT 中的安全功能中所述。
语法
errno_t memcpy_s(
void *dest,
size_t destSize,
const void *src,
size_t count
);
errno_t wmemcpy_s(
wchar_t *dest,
size_t destSize,
const wchar_t *src,
size_t count
);
参数
dest
新缓冲区。
destSize
目标缓冲区的大小,memcpy_s
以字节为单位,wmemcpy_s
以宽字符 (wchar_t
) 为单位。
src
从中进行复制操作的缓冲区。
count
要复制的字符数。
返回值
如果成功,则为零;如果失败,则为错误代码。
错误条件
dest |
destSize |
src |
count |
返回值 | dest 的内容 |
---|---|---|---|---|---|
any | 任意 | any | 0 | 0 | 未修改 |
NULL |
any | any | 非零 | EINVAL |
未修改 |
any | any | NULL |
非零 | EINVAL |
dest 已清零 |
any | < count |
any | 非零 | ERANGE |
dest 已清零 |
备注
memcpy_s
从 src
将 count
个字节复制到 dest
中;wmemcpy_s
复制 count
个宽字符。 如果源和目标区域重叠,则 memcpy_s
的行为是未定义的。 使用 memmove_s
处理重叠区域。
这些函数验证其参数。 如果 count
不为零,并且 dest
或 src
是空指针,或者 destSize
小于 count
,则这些函数将调用无效参数处理程序,如参数验证中所述。 如果允许执行继续,则这些函数将返回 EINVAL
或 ERANGE
并将 errno
设置为返回值。
默认情况下,此函数的全局状态范围限定为应用程序。 若要更改此行为,请参阅 CRT 中的全局状态。
要求
例程 | 必需的标头 |
---|---|
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");
}
0 1 4 9 16 25 36 49 64 81