본문 바로가기

C 언어 함수

memmove 함수

memmove 함수는 메모리 블록을 다른 위치로 복사할 때 사용되며, memcpy와 유사하지만 중첩된 메모리 영역에서도 안전하게 사용할 수 있다는 특징이 있다.

1. memmove 함수의 정의

memmove 함수는 <string.h> 헤더 파일에 정의되어 있으며, 원형은 다음과 같다. 

void *memmove(void *목적지 포인터, const void *원본 포인터, size_t 복사할 바이트 수);

2. 기능과 특성

memmove 함수는 원본 포인터에서 목적지 포인터로 n바이트 만큼의 데이터를 복사한다.가장 중요한 특징은 소스(src)와 목적지(dest)가 겹치는 경우에도 올바르게 데이터를 복사한다는 점이다. 이는 내부적으로 복사할 데이터를 임시 버퍼에 저장한 후, 목적지로 이동시키기 때문에 발생한다. 이러한 특징 때문에 memcpy 보다는 약간 느릴 수 있지만, 데이터의 안정성을 보장한다는 장점이 있다. 

3. 사용 예제

hello world 에서 world 문자열을 hello 문자열의 위치로 이동해보자 

#include <stdio.h> 
#include <string.h> 

int main() { 
char text[] = "hello world"; // text 배열 내에서 "world" 문자열을 "hello" 위치로 이동 
printf("Original: %s\n", text); 
memmove(text, text + 6, 5); text[5] = '\0'; // NULL 문자로 문자열 종료 
printf("Moved: %s\n", text); 
return 0; }

//출력 결과
Original: hello world;
Moved: world

4. 주의사항

  • memmove는 내부적으로 임시 버퍼를 사용하기 때문에 메모리 사용량이 늘어날 수 있다. 
  • 메모리 영역이 겹치지 않는 경우 memcpy를 사용하는 것이 성능 상 이점이 있을 수 있음