Ben arasındaki farkı anlamaya çalışıyorum memcpy()
ve memmove()
, ve ben metni okumak zorunda memcpy()
oysa örtüşen kaynağın bakım ve hedef almaz memmove()
yapar.
Ancak, bu iki işlevi üst üste gelen bellek bloklarında yürüttüğümde, ikisi de aynı sonucu verir. Örneğin, memmove()
yardım sayfasında aşağıdaki MSDN örneğini alın : -
Bunun dezavantajlarını memcpy
ve nasıl memmove
çözdüğünü anlamak için daha iyi bir örnek var mı ?
// 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 );
}
Çıktı:
The string: aabbcc
New string: aaaabb
The string: aabbcc
New string: aaaabb
memcpy
olur assert
bölgeler kasıtlı kodunuzu böcek kaplanması yerine örtüşme bilmediğimiz.
The string: aabbcc New string: aaaaaa The string: aabbcc New string: aaaabb