Partager via


memmove_s, wmemmove_s

Déplace un tampon vers un autre. Il s'agit de versions de memmove, wmemmove avec des améliorations de sécurité, comme décrit dans Fonctionnalités de sécurité dans le CRT.

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 de retour

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

Conditions d'erreur

dest

numberOfElements

src

Valeur de retour

Contenu de dest.

NULL

any

any

EINVAL

non modifié

any

any

NULL

EINVAL

non modifié

any

< count

any

ERANGE

non modifié

Notes

Copie des octets count de caractères depuis src vers dest*.* Si certaines zones de la zone de source et de destination se chevauchent, memmove_s garantit que les octets de source d'origine dans la région de chevauchement sont copiés avant d'être remplacés.

Si dest ou si src est un pointeur null ou si la chaîne de destination est trop petite, ces fonctions appellent le gestionnaire de paramètres non valides, 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

memmove_s

<string.h>

wmemmove_s

<wchar.h>

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

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

Équivalent .NET Framework

System::Buffer::BlockCopy

Voir aussi

Référence

Manipulation de la mémoire tampon

_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