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。有关更多信息,请参见 平台调用示例

请参见

参考

缓冲区处理

_memccpy

memchr, wmemchr

memcmp, wmemcmp

memmove, wmemmove

memset, wmemset

strcpy, wcscpy, _mbscpy

strncpy, _strncpy_l, wcsncpy, _wcsncpy_l, _mbsncpy, _mbsncpy_l

strncpy_s, _strncpy_s_l, wcsncpy_s, _wcsncpy_s_l, _mbsncpy_s, _mbsncpy_s_l