나는 차이를 이해하려고 memcpy()
하고 memmove()
, 나는 텍스트를 읽을 수있는 memcpy()
반면, 중복 소스의 관심과 대상을 고려하지 않습니다 memmove()
않습니다를.
그러나 겹치는 메모리 블록 에서이 두 기능을 실행하면 둘 다 동일한 결과를 얻습니다. 예를 들어 memmove()
도움말 페이지 에서 다음 MSDN 예제를 참조하십시오.
의 단점을 이해하는 좋은 예 거기에 memcpy
어떻게 memmove
해결할 수있는 문제는?
// 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 );
}
산출:
The string: aabbcc
New string: aaaabb
The string: aabbcc
New string: aaaabb
memcpy
하면 assert
코드의 버그를 의도적으로 덮지 않고 영역이 겹치지 않게됩니다.
The string: aabbcc New string: aaaaaa The string: aabbcc New string: aaaabb