共用方式為


memcpy_s, wmemcpy_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 寬字元 ( wchar_t ) 表示 wmemcpy_s

src
要複製的緩衝區。

count
要複製的字元數目。

傳回值

如果成功,就是零,如果失敗,則為錯誤碼。

錯誤條件

dest destSize src count 傳回值 dest 的內容。
任意 任意 任意 0 0 未修改
NULL 任意 任意 非零 EINVAL 未修改
任意 任意 NULL 非零 EINVAL dest 已歸零
任意 < count 任意 非零 ERANGE dest 已歸零

備註

memcpy_scount 位元組從 srcdest 複製到 ; wmemcpy_scount 複製寬字元。 如果來源和目的地區域重迭,則 的行為 memcpy_s 為未定義。 使用 memmove_s 處理重疊的區域。

這些函式會驗證它們的參數。 如果 count 為非零且 dest 或 為 Null 指標,或 srcdestSize 小於 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
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