Sdílet prostřednictvím


memcpy_s wmemcpy_s

Kopie bajtů mezi vyrovnávací paměti.Tyto verze jsou memcpy wmemcpy s vylepšení zabezpečení popsaným v Funkce zabezpečení v 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
);

Parametry

  • dest
    Nové vyrovnávací paměti.

  • numberOfElements
    Velikost cílové vyrovnávací paměti.

  • src
    Vyrovnávací paměť kopírovat z.

  • count
    Počet znaků, které chcete kopírovat.

Vrácená hodnota

Nula, pokud je úspěšná. Kód chyby při selhání.

Chybové podmínky

dest

numberOfElements

src

Vrácená hodnota

Obsahdest

NULL

žádné

žádné

EINVAL

Nezměněno

žádné

žádné

NULL

EINVAL

destje vynulován

žádné

< count

žádné

ERANGE

destje vynulován

Poznámky

memcpy_scopies count bytes from src to dest; wmemcpy_skopie count široké znaky (dvou bajtů).Pokud zdrojový a cílový překrývají, chování memcpy_s nedefinovaná.Použití memmove_s zpracování překrývající se oblasti.

Tyto funkce ověřit jejich parametrů.Pokud dest nebo src je nulový ukazatel nebo numberOfElements je příliš malá pro vyrovnávací paměť, tyto funkce vyvolat popisovač neplatný parametr popsaným v Ověření parametrů.Pokud je povoleno spuštění pokračovat, vrátí tyto funkce EINVAL a errno na EINVAL.

Požadavky

Rutina

Požadované záhlaví

memcpy_s

<memory.h> nebo <string.h>

wmemcpy_s

<wchar.h>

Další informace o kompatibilitě, viz Compatibility v úvodu.

Příklad

// 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");
}
  

Ekvivalent v rozhraní .NET Framework

Nelze použít Použijte volání funkce standardní C, PInvoke. Další informace naleznete v tématu Příklady vyvolat platformu.

Viz také

Referenční dokumentace

Manipulace s vyrovnávací paměti

_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