memmove_s, wmemmove_s

Déplace une mémoire tampon à un autre.Ce sont des versions de memmove, wmemmove avec des améliorations de sécurité comme décrit dans Fonctionnalités de sécurité du 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 de défaillance

conditions d'erreur

dest

numberOfElements

src

Valeur de retour

contenu d' dest

NULL

quels

quels

EINVAL

non modifié

quels

quels

NULL

EINVAL

non modifié

quels

< count

quels

ERANGE

non modifié

Notes

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

si dest ou si src est un pointeur null, ou si la chaîne de destination est trop petite, ces fonctions appellent un gestionnaire de paramètre non valide, comme décrit dans Validation des paramètres .Si est autorisé à l'exécution de se poursuivre, ces fonctions EINVAL de retour et errno défini à EINVAL.

Configuration requise

routine

en-tête requis

memmove_s

<string.h>

wmemmove_s

<wchar.h>

Pour des informations de compatibilité supplémentaires, 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 : : mémoire tampon : : BlockCopy

Voir aussi

Référence

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