memcpy_swmemcpy_s

在缓冲区之间复制字节。 这些函数的版本是 memcpywmemcpy,具有安全性增强功能,如 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 任意 0 0 未修改
NULL any 任意 非零 EINVAL 未修改
any 任意 NULL 非零 EINVAL dest 已清零
any < count any 非零 ERANGE dest 已清零

备注

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

这些函数验证其参数。 如果 count 不为零,并且 destsrc 是空指针,或者 destSize 小于 count,则这些函数将调用无效参数处理程序,如参数验证中所述。 如果允许执行继续,则这些函数将返回 EINVALERANGE 并将 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

另请参阅

缓冲区操作
_memccpy
memchrwmemchr
memcmpwmemcmp
memmovewmemmove
memsetwmemset
strcpywcscpy_mbscpy
strncpy_strncpy_lwcsncpy_wcsncpy_l_mbsncpy_mbsncpy_l
strncpy_s_strncpy_s_lwcsncpy_s_wcsncpy_s_l_mbsncpy_s_mbsncpy_s_l