Condividi tramite


memcpy_s, wmemcpy_s

Copia i byte tra buffer.queste sono versioni di memcpy, wmemcpy con i miglioramenti della sicurezza come descritto in Funzionalità di sicurezza in 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
);

Parametri

  • dest
    nuovo buffer.

  • numberOfElements
    Dimensione del buffer di destinazione.

  • src
    Buffer da.

  • count
    numero di caratteri da copiare.

Valore restituito

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

condizioni di errore

dest

numberOfElements

src

Valore restituito

Contenuto di dest

NULL

qualsiasi

qualsiasi

EINVAL

non modificato

qualsiasi

qualsiasi

NULL

EINVAL

dest verrà azzerato esterno

qualsiasi

< count

qualsiasi

ERANGE

dest verrà azzerato esterno

Note

memcpy_s copie count byte da src in dest; wmemcpy_s copie count caratteri di tipo " wide " (byte).se il database di origine e la sovrapposizione di destinazione, il comportamento di memcpy_s è definito.utilizzo memmove_s per gestire le aree sovrapposti.

Queste funzioni convalidano i relativi parametri.se dest o src è un puntatore null, o numberOfElements è troppo piccole per il buffer, queste funzioni richiamare il gestore non valido di parametro, come descritto in Convalida dei parametri.Se l'esecuzione è consentita per continuare, ritorno di queste funzioni EINVAL e set errno in EINVAL.

Requisiti

routine

Intestazione di associazione

memcpy_s

<memory.h> o <string.h>

wmemcpy_s

<wchar.h>

per informazioni di compatibilità aggiuntive, vedere compatibilità nell'introduzione.

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

Equivalente .NET Framework

Non applicabile. Per chiamare la funzione c standard, utilizzare PInvoke. Per ulteriori informazioni, vedere Esempi di pinvoke.

Vedere anche

Riferimenti

Modifica 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