Condividi tramite


memcpy_s, wmemcpy_s

Copia i byte tra i buffer. Queste funzioni sono versioni di , wmemcpycon miglioramenti dellamemcpy sicurezza, come descritto in Funzionalità di sicurezza in CRT.

Sintassi

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

Parametri

dest
Nuovo buffer.

destSize
Dimensioni del buffer di destinazione, in byte per memcpy_s e caratteri wide (wchar_t) per wmemcpy_s.

src
Buffer da cui copiare.

count
Numero di caratteri da copiare.

Valore restituito

Zero se con esito positivo; un codice di errore in caso di errore.

Condizioni di errore

dest destSize src count Valore restituito Contenuto di dest
qualsiasi qualsiasi qualsiasi 0 0 Non modificato
NULL qualsiasi qualsiasi non zero EINVAL Non modificato
qualsiasi qualsiasi NULL non zero EINVAL dest è azzerato
qualsiasi < count qualsiasi non zero ERANGE dest è azzerato

Osservazioni:

memcpy_s copia count i byte da src a dest; wmemcpy_s copia count caratteri wide. Se le aree di origine e di destinazione si sovrappongono, il comportamento di memcpy_s non è definito. Usare memmove_s per gestire le aree di sovrapposizione.

Queste funzioni convalidano i relativi parametri. Se count è diverso da zero e dest o src è un puntatore Null o destSize è minore di count, queste funzioni richiamano il gestore di parametri non validi, come descritto in Convalida dei parametri. Se l'esecuzione può continuare, queste funzioni restituiscono EINVAL o ERANGEe impostano errno sul valore restituito.

Per impostazione predefinita, lo stato globale di questa funzione è limitato all'applicazione. Per modificare questo comportamento, vedere Stato globale in CRT.

Requisiti

Ciclo Intestazione obbligatoria
memcpy_s <memory.h> oppure <string.h>
wmemcpy_s <wchar.h>

Per altre informazioni sulla compatibilità, vedere Compatibility (Compatibilità).

Esempio

// 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

Vedi anche

Manipolazione del buffer
_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