Partager via


memcpy_s, wmemcpy_s

Copies d'octets entre les mémoires tampons. Il s'agit de versions de memcpy, wmemcpy avec des améliorations de sécurité, comme décrit dans Fonctionnalités de sécurité dans le 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
);

Paramètres

  • dest
    Nouvelle mémoire tampon.

  • numberOfElements
    Taille de la mémoire tampon de destination.

  • src
    Mémoire tampon à partir de laquelle copier.

  • count
    Nombre de caractères à copier.

Valeur de retour

Zéro si l'opération a réussi ; code d'erreur en cas de échec.

Conditions d'erreur

dest

numberOfElements

src

Valeur de retour

Contenu de dest.

NULL

any

any

EINVAL

non modifié

any

any

NULL

EINVAL

dest est mis à zéro

any

< count

any

ERANGE

dest est mis à zéro

Notes

memcpy_s copie des octets count depuis src vers dest; count copie des caractères larges wmemcpy_s (deux octets). Si les chaînes source et de destination se superposent, le comportement de memcpy_s est non défini. Utilisez memmove_s pour gérer le chevauchement des régions.

Ces fonctions valident leurs paramètres. Si dest ou src est un pointeur null, ou si numberOfElements est trop petite pour la mémoire tampon, ces fonctions appellent le gestionnaire de paramètre non valide, comme décrit dans Validation de paramètre. Si l'exécution est autorisée à se poursuivre, ces fonctions retournent EINVAL et définissent errno avec la valeur EINVAL.

Configuration requise

Routine

En-tête requis

memcpy_s

<memory.h> ou <string.h>

wmemcpy_s

<wchar.h>

Pour plus d'informations sur la compatibilité, consultez Compatibilité dans l'introduction.

Exemple

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

Équivalent .NET Framework

Non applicable. Pour appeler la fonction C standard, utilisez PInvoke. Pour plus d'informations, consultez Exemples d'appel de plateforme.

Voir aussi

Référence

Manipulation de la mémoire tampon

_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