memmove_s
, wmemmove_s
Déplace une mémoire tampon vers une autre. Ces fonctions sont des versions de memmove
, wmemmove
avec des améliorations de sécurité, comme indiqué dans 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 d’erreur
dest |
numberOfElements |
src |
Valeur retournée | Contenu de dest |
---|---|---|---|---|
NULL |
n'importe laquelle | n'importe laquelle | EINVAL |
non modifié |
n'importe laquelle | n'importe laquelle | NULL |
EINVAL |
non modifié |
n'importe laquelle | < count |
n'importe laquelle | 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 de la mémoire tampon
_memccpy
memcpy
, wmemcpy
strcpy_s
, , wcscpy_s
_mbscpy_s
strcpy
, , wcscpy
_mbscpy
strncpy_s
, , _strncpy_s_l
, _wcsncpy_s_l
wcsncpy_s
, , _mbsncpy_s
_mbsncpy_s_l
strncpy
, , _strncpy_l
, _wcsncpy_l
wcsncpy
, , _mbsncpy
_mbsncpy_l