Le man de la fonction memmove
🎯 Déplacer des blocs de mémoire, même lorsqu’ils se chevauchent.
⚙️ Prototype de memmove
void *memmove(void *dest, const void *src, size_t n);
🧑💻 Fonctionnement de memmove
La fonction memmove
copie n
octets de la zone mémoire pointée par src
vers la zone mémoire pointée par dest
. Contrairement à memcpy
, memmove
est sécurisée pour copier des zones de mémoire qui se chevauchent. Elle le fait en utilisant une technique qui garantit que le contenu source n’est pas corrompu pendant la copie. Si les zones de mémoire ne se chevauchent pas, memmove
fonctionne de manière similaire à memcpy
. Le retour de la fonction est un pointeur vers la destination dest
.
Paramètres :
dest
: Pointeur vers la zone de mémoire de destination.src
: Pointeur vers la zone de mémoire source.n
: Nombre d’octets à copier.
Retour :
Un pointeur vers la zone mémoire de destination dest
.
Remarques :
memmove
est la fonction de choix lorsque les zones source et destination se chevauchent, car elle garantit l’intégrité des données pendant la copie.- Attention : Bien que
memmove
soit plus sûr quememcpy
en cas de chevauchement, elle est généralement un peu plus lente en raison de la vérification supplémentaire et de la manipulation des données.
✨ Exemple d'utilisation de memmove
Déplacement de Données dans un Tableau :
👉 Ici, memmove
est utilisé pour déplacer les trois premiers éléments du tableau arr
de deux positions vers la droite, ce qui pourrait entraîner un chevauchement. memmove
assure que le contenu est déplacé correctement sans perte d’information.
int arr[] = {1, 2, 3, 4, 5};
memmove(arr + 2, arr, 3 * sizeof(int)); // Déplace les 3 premiers éléments de 2 positions vers la droite
for (int i = 0; i < 5; i++) {
printf("%d ", arr[i]);
}
Voir aussi :
memcpy
: Copie un bloc de mémoire à un autre emplacement sans gérer les chevauchements.memset
: Remplit une zone de mémoire avec une valeur donnée.memcmp
: Compare deux zones de mémoire.strcpy
: Copie une chaîne de caractères dans une autre.strncpy
: Copie un nombre limité de caractères d’une chaîne dans une autre.