Udostępnij za pośrednictwem


memcpy_s, wmemcpy_s

Kopie bajtów między buforów.Są to wersje memcpy, wmemcpy z rozszerzeń zabezpieczeń opisane w Funkcje zabezpieczeń w 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
    Nowe buforu.

  • numberOfElements
    Rozmiar buforu docelowego.

  • src
    Bufor do skopiowania.

  • count
    Liczba znaków do skopiowania.

Wartość zwracana

Zero, jeśli kończy się pomyślnie; Kod błędu w przypadku awarii.

Warunki błędów

dest

numberOfElements

src

Zwracanie wartości

Zawartośćdest

NULL

wszelkie

wszelkie

EINVAL

Nie zmodyfikowano

wszelkie

wszelkie

NULL

EINVAL

destjest zerowana

wszelkie

< count

wszelkie

ERANGE

destjest zerowana

Uwagi

memcpy_scopies count bytes from src to dest; wmemcpy_skopie count szerokości znaków (dwa bajty).Jeśli źródłowy i docelowy nakładania, zachowanie memcpy_s jest niezdefiniowane.Użyj memmove_s do obsługi pokrywających się obszarów.

Te funkcje sprawdzania poprawności ich parametrów.Jeśli dest lub src jest wskaźnik null, lub numberOfElements jest za mały dla buforu, te funkcje wywołania obsługi nieprawidłowy parametr, zgodnie z opisem w Sprawdzanie poprawności parametru.Jeśli wykonanie może kontynuować, funkcje te zwracają EINVAL i errno do EINVAL.

Wymagania

Rozpoczęto wykonywanie procedury

Wymaganego nagłówka

memcpy_s

<memory.h> lub <string.h>

wmemcpy_s

<wchar.h>

Aby uzyskać dodatkowe informacje o zgodności, zobacz zgodności we wprowadzeniu.

Przykład

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

Odpowiednik w programie .NET Framework

Nie dotyczy. Aby wywołać standardowych funkcji C, należy użyć PInvoke. Aby uzyskać więcej informacji, zobacz Przykłady wywołać platformy.

Zobacz też

Informacje

Manipulowanie buforem

_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