210220 개발일지(75일차) - c언어에서 memcpy() 함수 구현 및 사용예시

고재개발·2021년 2월 25일
0

C Language

목록 보기
13/13

c언어에는 특정 메모리 영역에서 다른 메모리 영역으로, 원하는 크기만큼 복사를 하기위한 함수가 있다.

memcpy() 함수 정의

C언어에서 memcpy() 함수는 "src" 메모리 영역에서 "dest" 메모리 영역으로 "size" byte 만큼 내용물(?)을 복사한다. 이 때, dest와 src의 메모리 영역은 겹치면 안된다.

구현

/* Copies SIZE bytes from SRC to DST, which must not overlap.
   Returns DST. */
void *
memcpy (void *dst, const void *src, size_t size) {
	unsigned char *dst = dst;
	const unsigned char *src = src;

	ASSERT (dst != NULL || size == 0);
	ASSERT (src != NULL || size == 0);

	// size만큼 src 포인터를 이동하면서 1바이트씩 dest로 복사
	while (size-- > 0)
		*dst++ = *src++;

	return dst;
}

위를 보면 알겠지만 dst를 리턴한다.
strcpy() 함수와 차이점은 문자열은 문자열의 끝을 Null byte로 구분하지만, 메모리는 Null byte 도 데이터이기 때문에 size를 명확히 주어야 한다는 점이다.

사용 예시

#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"
profile
고재개발

0개의 댓글