memcpy_s, wmemcpy_s

Kopiuje bajty między buforami. Te funkcje to wersje programu memcpywmemcpyz ulepszeniami zabezpieczeń zgodnie z opisem w temacie Funkcje zabezpieczeń w narzędziu CRT.

Składnia

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
Nowy bufor.

destSize
Rozmiar buforu docelowego, w bajtach dla memcpy_s i znaków szerokich (wchar_t) dla wmemcpy_s.

src
Bufor do skopiowania.

count
Liczba znaków do skopiowania.

Wartość zwracana

Zero w przypadku powodzenia; kod błędu dotyczący błędu.

Warunki błędu

dest destSize src count Wartość zwracana Zawartość dest
dowolny dowolny dowolny 0 0 Nie zmodyfikowano
NULL dowolny dowolny bez zera EINVAL Nie zmodyfikowano
dowolny dowolny NULL bez zera EINVAL dest jest zeroed out
dowolny < count dowolny bez zera ERANGE dest jest zeroed out

Uwagi

memcpy_s kopiuje bajty count z src do dest; wmemcpy_s kopiuje count szerokie znaki. Jeśli regiony źródłowe i docelowe nakładają się na siebie, zachowanie elementu memcpy_s jest niezdefiniowane. Służy memmove_s do obsługi nakładających się regionów.

Te funkcje weryfikują swoje parametry. Jeśli count nie ma wartości zero lub destsrc jest wskaźnikiem o wartości null lub destSize jest mniejszy niż count, te funkcje wywołują nieprawidłową procedurę obsługi parametrów, zgodnie z opisem w temacie Weryfikacja parametrów. Jeśli wykonywanie jest dozwolone do kontynuowania, te funkcje zwracają EINVAL wartość lub ERANGE, a następnie ustawiają errno wartość zwracaną.

Domyślnie stan globalny tej funkcji jest zakresem aplikacji. Aby zmienić to zachowanie, zobacz Stan globalny w CRT.

Wymagania

Procedura Wymagany nagłówek
memcpy_s <memory.h> lub <string.h>
wmemcpy_s <wchar.h>

Aby uzyskać więcej informacji o zgodności, zobacz Zgodność.

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

Zobacz też

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