memmove 함수

void *memmove(void *dest, const void *source, size_t n); 메모리를 이동하는 함수

 입력 매개 변수 리스트

dest 이동 대상 버퍼

source 이동할 원본

n 이동할 바이트 수

반환 값

dest

 

memmove 함수도 memcpy 처럼 메모리의 내용을 다른 메모리로 옮기는 함수입니다. memmove 함수 내부에서는 이동할 데이터를 임시 버퍼에 옮긴 후에 대상 버퍼로 이동하여 옮길 데이터가 있는 버퍼와 대상 데이터 버퍼가 근접하더라도 중첩 현상이 발생하지 않습니다.

memcpy 함수는 근접했을 때 중첩 현상이 발생할 수 있습니다. 예를 들어 memcpy(base, base+1,n) 이나 memcpy(base+1, base,n)과 같은 호출은 원본 버퍼와 대상 버퍼의 위치가 근접하므로 중첩 현상이 발생할 수 있습니다. 컴파일러에 따라 이와 같은 현상을 없애 memmove와 같은 결과를 갖게 구현하기도 합니다.

따라서 메모리를 복사할 때 memcpy 함수보다는 memmove 함수가 신뢰성이 높습니다.

사용 예

출력