C언어. memcpy()와 memmove() 알아보기

최대 1 분 소요

🌟 memcpy() VS memmove()

이름에서 보면 알 수 있듯 memcpy()는 메모리를 복사할 때 쓰고, memmove()는 메모리를 이동할 때 사용한다.

memcpy()의 원형은 이렇게 쓰고,

void* memcpy(void* dest, void* src, size_t size);

memmove()는 이렇게 생겼음.

void* memmove(void* dest, void* src, size_t size);

🌟 사용법

#include <stdio.h>
#include <string.h>
#include <malloc.h>
#define LEN 5

int main()
{
    int arr1[LEN] = {1, 2, 3, 4, 5};
    int* arr2 = (int*)malloc(LEN * sizeof(int));
    
    memcpy(arr2, arr1, sizeof(int) * LEN); //arr1을 arr2에 복사 붙여넣기 함
}

arr1의 데이터를 arr2에 복사해서 넣어주었다. 여기서는 잘 나오겠지만, 사실 memcpy()는 loverlap 현상, 메모리가 겹칠 경우 대응이 안된다는 단점이 있다. 그럴 때 memmove()를 써야 함!

memcpy에서 함수 이름만 memmove로 바꾸면 memmove가 작동된다.

🌟 결론

☝ memcpy()는 메모리 겹침 현상에 오류가 난다.

☝ memmove()를 쓰는 게 더 안정적!

memcpy()는 메모리를 직접 복사해서 넣지만, memmove()는 임시 버퍼에 넣고 사용해서 그렇다고 한다. 나중에 오버랩 현상도 알아봐야지….

댓글남기기