일상 메모장

memcpy 사용법 및 구현 - C 메모리 복사 본문

C 언어

memcpy 사용법 및 구현 - C 메모리 복사

핸드오버 2020. 1. 29. 23:25

사용법

#include <string.h>

void *memcpy(void *dest, const void *src, size_t n);

정의

memcpy() 함수는 src 메모리 영역에서 dest 메모리 영역으로 n byte 만큼 복사합니다.

메모리 영역은 겹치면 안됩니다. 만약 src 와 dest 메모리 영역이 겹친다면 memmove 함수를 사용하세요.

 

반환 값

dest 의 포인터를 반환합니다.

 

memcpy() 구현 (memcpy 실제 구현부)

/**
 * memcpy - Copy one area of memory to another
 * @dest: Where to copy to
 * @src: Where to copy from
 * @count: The size of the area.
 *
 * You should not use this function to access IO space, use memcpy_toio()
 * or memcpy_fromio() instead.
 */
void *memcpy(void *dest, const void *src, size_t count)
{
        char *tmp = dest;
        const char *s = src;

        /* count 만큼 src 의 포인터를 이동하면 한바이트씩 dest로 복사합니다. */
        while (count--)
                *tmp++ = *s++;
        return dest;
}

src 문자 한자씩 dest 에 count 만큼 복사합니다. strcpy() 함수와 차이점은 문자열은 문자열의 끝을 Null byte로 구분하지만, 메모리는 Null byte 도 데이터이기 때문에 count를 명시적으로 지정해야만 합니다.

예제

#include <string.h>
#include <stdio.h>
 
int main(void)
{
        char src[32] = "Source memory";
        char dest[32] = "Destination memory";
 
        printf("Destination is \"%s\"\n", dest);
        /* src 메모리를 sizeof(src) 만큼 (32byte) dest 로 복사합니다. */
        memcpy( dest, src, sizeof(src));
        printf( "After memcpy, Destination is \"%s\"\n", dest);
        
        return 0;
}

결과값은

Destination is "Destination memory"

After memcpy, Destination is "Source memory"

입니다.