#include <string.h> // <cstring> en C++
void * memmove( void * destination, const void * source, size_t size );
Cette fonction permet de copier un bloc de mémoire spécifié par le paramètre source
dans un nouvel emplacement désigné par le paramètre
destination
. On peut donc dire que cette fonction est proche de la fonction memcpy. Néanmoins, la différence réside dans le fait
que la fonction memmove
accepte que les deux zones de mémoire puissent se chevaucher.
En cas de chevauchement, la copie se passe comme si les octets de la zone source étaient d'abord copiés dans une zone temporaire, qui ne chevauche aucune des
deux zones pointées par source
et destination
, et les octets sont ensuite copiés de la zone temporaire vers la zone de destination.
La fonction renvoie l'adresse du bloc de mémoire de destination.
L'exemple de code suivant déplace les valeurs d'un tableau d'entier d'une entrée vers la droite afin d'y insérer une nouvelle valeur en tête.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
#include <stdio.h> #include <stdlib.h> #include <string.h> #define ELEMENT_COUNT 10 int main() { // On crée une zone de mémoire de 10 entiers et contenant // que neuf valeurs. La dixième est non utilisée (0). int data[] = { 20, 30, 40, 50, 60, 70, 80, 90, 100, 0 }; // On affiche le contenu de la collection for( int i=0; i<ELEMENT_COUNT; i++ ) { printf( "%d ", data[i] ); } puts( "" ); // Un retour à la ligne // On décale les éléménts dans la collection ... void * source = (void *) data; void * destination = (void *) ( data + 1 ); size_t size = ELEMENT_COUNT * sizeof( int ); memmove( destination, source, size ); // ... pour y insérer une nouvelle valeur en tête data[0] = 10; // On affiche le contenu de la collection for( int i=0; i<ELEMENT_COUNT; i++ ) { printf( "%d ", data[i] ); } puts( "" ); // Un retour à la ligne return EXIT_SUCCESS; } |
Et voici le résultat produit par cet exemple de code.
$> gcc -o sample sample.c $> ./sample 20 30 40 50 60 70 80 90 100 0 10 20 30 40 50 60 70 80 90 100 $>
Améliorations / Corrections
Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.
Emplacement :
Description des améliorations :