Share via


memmove_s, wmemmove_s

Déplace une mémoire tampon vers une autre. Ces fonctions sont des versions de , wmemmoveavec des améliorations de memmovesécurité, comme décrit dans les fonctionnalités de sécurité dans le CRT.

Syntaxe

errno_t memmove_s(
   void *dest,
   size_t numberOfElements,
   const void *src,
   size_t count
);
errno_t wmemmove_s(
   wchar_t *dest,
   size_t numberOfElements,
   const wchar_t *src,
   size_t count
);

Paramètres

dest
Objet de destination.

numberOfElements
Taille de la mémoire tampon de destination.

src
Objet source.

count
Nombre d’octets (memmove_s) ou de caractères (wmemmove_s) à 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 numberOfElements src Valeur retournée Contenu de dest
NULL tous tous EINVAL non modifié
tous tous NULL EINVAL non modifié
tous < count tous ERANGE non modifié

Notes

Copie les count octets de caractères de src vers dest. Si certaines parties de la source et des régions de destination se chevauchent, memmove_s vérifiez que les octets sources d’origine de la région qui se chevauchent sont copiés avant d’être remplacés.

Si dest ou s’il src s’agit d’un pointeur Null ou si la chaîne de destination est trop petite, ces fonctions appellent un gestionnaire de paramètres non valide, comme décrit dans la validation des paramètres. Si l'exécution est autorisée à se poursuivre, ces fonctions retournent EINVAL et définissent errno avec la valeur EINVAL.

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
memmove_s <string.h>
wmemmove_s <wchar.h>

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

Exemple

// crt_memmove_s.c
//
// The program demonstrates the
// memmove_s function which works as expected
// for moving overlapping regions.

#include <stdio.h>
#include <string.h>

int main()
{
   char str[] = "0123456789";

   printf("Before: %s\n", str);

   // Move six bytes from the start of the string
   // to a new position shifted by one byte. To protect against
   // buffer overrun, the secure version of memmove requires the
   // the length of the destination string to be specified.

   memmove_s((str + 1), strnlen(str + 1, 10), str, 6);

   printf_s(" After: %s\n", str);
}

Sortie

Before: 0123456789
After: 0012345789

Voir aussi

Manipulation des mémoires tampons
_memccpy
memcpy, wmemcpy
strcpy_s, wcscpy_s, _mbscpy_s
strcpy, wcscpy, _mbscpy
strncpy_s, _strncpy_s_l, wcsncpy_s, _wcsncpy_s_l, _mbsncpy_s, _mbsncpy_s_l
strncpy, _strncpy_l, wcsncpy, _wcsncpy_l, _mbsncpy, _mbsncpy_l