Nous recommandons d’utiliser Visual Studio 2017

memcpy_s, wmemcpy_s

 

Date de publication : novembre 2016

Pour obtenir la dernière documentation sur Visual Studio 2017, consultez Documentation Visual Studio 2017.

Copie des octets entre les mémoires tampon. Voici les versions de memcpy wmemcpy avec des améliorations de sécurité comme décrit dans fonctionnalités de sécurité de la bibliothèque CRT.

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, des caractères larges (wchar_t) pour wmemcpy_s memcpy_s.

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

count
Nombre de caractères à copier.

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

Conditions d’erreur

destdestSizesrccountValeur de retourContenu de dest
anyanyany00Non modifié
NULLanyanydifférent de zéroEINVALNon modifié
anyanyNULLdifférent de zéroEINVALdestest remis à zéro
any< countanydifférent de zéroERANGEdestest remis à zéro

memcpy_s copie count octets de src vers dest ; wmemcpy_s copie count caractères larges (sur deux octets). Si la source et la 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. Si count est différente de zéro et dest ou src est un pointeur null, ou destSize est inférieure à count, 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.

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

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

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

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

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

Afficher: