共用方式為


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

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 處理重疊的區域。

這些函式會驗證它們的參數。 如果 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