共用方式為


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會去除

任何

< count

任何

ERANGE

dest會去除

備註

memcpy_scopies count bytes from src to dest; wmemcpy_s複製count寬字元 (兩個位元組為單位)。如果來源和目的重疊,行為的memcpy_s尚未定義。使用memmove_s處理重疊的區域。

這些函式會驗證它們的參數。如果dest或src是空值的指標,或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