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
strncpy, _strncpy_l, wcsncpy, _wcsncpy_l, _mbsncpy, _mbsncpy_l
strncpy_s, _strncpy_s_l, wcsncpy_s, _wcsncpy_s_l, _mbsncpy_s, _mbsncpy_s_l