본문 바로가기
프로그래밍 언어/C 언어

[C/C++] memmove() 함수 사용과 예제

by 까망 하르방 2021. 11. 28.
반응형

함수 원형

void* memcpy (void* dest, const void* src, size_t num)

dest: 데이터가 복사될 곳 (void* 형)

src: 복사될 데이터가 위치하는 곳 (void* 형)

num: 복사할 크기 (byte 단위)

→ src 에 있는 영역에서 num 바이트 만큼 dest 영역으로 옮긴다.

    중간에 버퍼를 이용하기 때문에 메모리를 옮길 때

     dest 영역과 src 영역이 겹처도 문제가 없다.

→ dest 영역과 src 영역 크기는 num 이상이어야 한다.

→ 필요한 헤더 파일: <string.h> 혹은 <memory.h>

 

반환 값

dest (void* 형)

 

예제 (정수 배열 복사)

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

int main()
{
    int src[2][3] = { {1, 2, 3},
                     {4, 5, 6}};
    int dest[2][3] = {};
    
    memmove(dest, src, sizeof(src));

    for (int i = 0; i < 2; ++i)
    {
        for (int j = 0; j < 3; ++j)
        {
            printf("%d ", dest[i][j]);
        }
        puts("");
    }
}

 

예제 (문자열 복사)

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

int main()
{
    char src[4] = "aaa";
    char dest1[6] = "bbbbb";
    char dest2[6] = "bbbbb";

    // 1. {src 길이}만 복사
    memmove(dest1, src, sizeof(char) * 3);

    // 2. {src 길이 + 1} 만큼 복사
    //    sizeof(src)과 크기 동일
    memmove(dest2, src, sizeof(char) * 3 + 1);

    printf("dest1 = %s\n", dest1);
    printf("dest2 = %s\n", dest2);
}

memcpy와 마찬가지로 문자열 복사시에는

끝 문자  \0」 에 유의해야 한다.
 

memcpy() vs memmove()

메모리에 있는 값을 복사한다는 점에서는

memcpy의 목적과 비슷하다고 볼 수 있다.

 

[C/C++] memcpy 사용 방법

함수 원형 void *memcpy(void *dest, const void *src, size_t N); •dest: 데이터가 복사되는 영역 (To) •src: 복사할 원본 데이터 (From) •N : 복사할 크기 (Byte) → memcpy(복사 받는 메모리, 복사할 메..

zoosso.tistory.com

memmove는 중간에 버퍼를 이용하기 때문에

메모리 영역이 겹처도 된다 차이점이 있다.  안정성

이로인해 성능상 memcpy 보다 떨어진다.

 

📌 함께 보면 좋은 포스팅

• memset 함수 사용

• memcpy 사용 방법

반응형

댓글