memcpy_s, wmemcpy_s

Copie des octets entre les mémoires tampon. Ces fonctions sont des versions de memcpy, wmemcpy avec des améliorations de sécurité, comme indiqué dans Fonctionnalités de sécurité dans le CRT.

Syntaxe

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

Paramètres

dest
Nouvelle mémoire tampon.

destSize
Taille de la mémoire tampon de destination, en octets pour memcpy_s et caractères larges (wchar_t) pour wmemcpy_s.

src
Mémoire tampon à partir de laquelle effectuer la copie.

count
Nombre de caractères à copier.

Valeur retournée

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

Conditions d’erreur

dest destSize src count Valeur retournée Contenu de dest
n'importe laquelle tous n'importe laquelle 0 0 Non modifié
NULL n'importe laquelle n'importe laquelle Différent de zéro EINVAL Non modifié
n'importe laquelle n'importe laquelle NULL Différent de zéro EINVAL dest est effacé
n'importe laquelle < count n'importe laquelle Différent de zéro ERANGE dest est effacé

Notes

memcpy_s copie count octets de src vers dest. wmemcpy_s copie count caractères larges. Si les régions source et de destination se chevauchent, le comportement de memcpy_s n’est pas défini. Utilisez memmove_s pour gérer les régions qui se chevauchent.

Ces fonctions valident leurs paramètres. S’il count n’est pas zéro et dest s’il src s’agit d’un pointeur null, ou destSize est inférieur countà , ces fonctions appellent le gestionnaire de paramètres non valide, comme décrit dans la validation des paramètres. Si l’exécution est autorisée à continuer, ces fonctions retournent EINVAL ou ERANGEdéfinissent errno la valeur de retour.

Par défaut, l’état global de cette fonction est limité à l’application. Pour modifier ce comportement, consultez État global dans le CRT.

Spécifications

Routine En-tête requis
memcpy_s <memory.h> ou <string.h>
wmemcpy_s <wchar.h>

Pour plus d’informations sur la compatibilité, consultez Compatibility.

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

Voir aussi

Manipulation de la mémoire tampon
_memccpy
memchr, wmemchr
memcmp, wmemcmp
memmove, wmemmove
memset, wmemset
strcpy, , wcscpy_mbscpy
strncpy, , _strncpy_l, _wcsncpy_lwcsncpy, , _mbsncpy_mbsncpy_l
strncpy_s, , _strncpy_s_l, _wcsncpy_s_lwcsncpy_s, , _mbsncpy_s_mbsncpy_s_l