Sdílet prostřednictvím


memcpy_s, wmemcpy_s

Zkopíruje bajty mezi vyrovnávacími pamětí. Tyto funkce jsou verze memcpy, wmemcpy s vylepšeními zabezpečení, jak je popsáno v funkcích zabezpečení v CRT.

Syntaxe

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
);

Parametry

dest
Nová vyrovnávací paměť.

destSize
Velikost cílové vyrovnávací paměti v bajtech pro memcpy_s a široké znaky (wchar_t) pro wmemcpy_s.

src
Vyrovnávací paměť, ze které se má kopírovat.

count
Počet znaků, které se mají zkopírovat

Vrácená hodnota

Nula v případě úspěchu; kód chyby při selhání.

Chybové podmínky

dest destSize src count Vrácená hodnota Obsah dest
jakékoliv jakékoliv jakékoliv 0 0 Neupraveno
NULL jakékoliv jakékoliv nenulový EINVAL Neupraveno
jakékoliv jakékoliv NULL nenulový EINVAL dest je vynulován
jakékoliv < count jakékoliv nenulový ERANGE dest je vynulován

Poznámky

memcpy_s kopíruje count bajty od src do dest; wmemcpy_s kopíruje count široké znaky. Pokud se zdrojové a cílové oblasti překrývají, chování memcpy_s není definováno. Slouží memmove_s ke zpracování překrývajících se oblastí.

Tyto funkce ověřují své parametry. Pokud count je nenulový nebo destsrc je ukazatel null nebo destSize je menší než count, tyto funkce vyvolávají neplatnou obslužnou rutinu parametru, jak je popsáno v ověření parametru. Pokud provádění může pokračovat, vrátí tyto funkce EINVAL nebo ERANGEa nastaví errno se na vrácenou hodnotu.

Ve výchozím nastavení je globální stav této funkce vymezen na aplikaci. Chcete-li toto chování změnit, přečtěte si téma Globální stav v CRT.

Požadavky

Rutina Požadovaný hlavičkový soubor
memcpy_s <memory.h> nebo <string.h>
wmemcpy_s <wchar.h>

Další informace o kompatibilitě najdete v tématu Kompatibilita.

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");
}
0 1 4 9 16 25 36 49 64 81

Viz také

Manipulace s vyrovnávací pamětí
_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