Partager via


memcpy_s, wmemcpy_s

Copie des octets entre les mémoires tampon. Ces fonctions sont des versions de , wmemcpyavec des améliorations de memcpysécurité, comme décrit dans les 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 de l’erreur

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

Notes

memcpy_s copie les count octets de src vers dest; wmemcpy_s copie des count caractères larges. Si les régions source et de destination se chevauchent, le comportement d’une memcpy_s région 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 des mémoires tampons
_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