c언어에는 특정 메모리 영역에서 다른 메모리 영역으로, 원하는 크기만큼 복사를 하기위한 함수가 있다.
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"