Je suis en train d'essayer de comprendre la différence entre memcpy()
et memmove()
, et j'ai lu le texte que memcpy ne prend pas soin de le chevauchement de la source et de la destination wheras memmove()
.
Cependant, lorsque j'exécute ces deux fonctions sur le chevauchement des blocs de mémoire, ils ont tous les deux donnent le même résultat. Par exemple, prenez la suite MSDNexample sur l' memmove()
page d'aide:-
Est-il un meilleur exemple pour comprendre les inconvénients de memcpy et comment memmove elle n'en résout?
// crt_memcpy.c
// Illustrate overlapping copy: memmove always handles it correctly; memcpy may handle
// it correctly.
#include <memory.h>
#include <string.h>
#include <stdio.h>
char str1[7] = "aabbcc";
int main( void )
{
printf( "The string: %s\n", str1 );
memcpy( str1 + 2, str1, 4 );
printf( "New string: %s\n", str1 );
strcpy_s( str1, sizeof(str1), "aabbcc" ); // reset string
printf( "The string: %s\n", str1 );
memmove( str1 + 2, str1, 4 );
printf( "New string: %s\n", str1 );
}
Sortie:
The string: aabbcc
New string: aaaabb
The string: aabbcc
New string: aaaabb