ft_memcpy

jaehlee·2025년 4월 25일

Libft

목록 보기
3/26

1. ft_memcpy란?


src로부터 n 바이트를 dest로 복사하는 함수이다.

2. 함수 프로토타입

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

3. 함수구현

#include "libft.h"

void	*ft_memcpy(void *dest, const void *src, size_t num)
{
	size_t	i;

	i = 0;
	while (dest == 0 && src == 0)
		return (NULL);
	while (i < num)
	{
		((unsigned char *) dest)[i] = ((unsigned char *) src)[i];
		i++;
	}
	return (dest);
}

사용예시

int main(void)
{
	char src[] = "Hello, 42!";
	char dest[20];

	ft_memcpy(dest, src, sizeof(src)); // '\0'까지 포함해서 복사

	printf("복사된 문자열: %s\n", dest); // 출력: Hello, 42!
	return 0;
}

4. 주의점

1. src와 dest가 겹치면 안됨

ft_memset함수는 src와 dest가 겹치면 안된다.
만약 두 변수의 메모리 주소가 겹치는 경우에는 복사 붙여넣기를 할 때 값이 덮어씌워지는 경우가 발생한다.
예를들어

char str[] = "123456";
ft_memcpy(str + 2, str, 4);

위 코드에선 str + 2와 str이 메모리 영역이 겹치기때문에 문제가 발생한다.
따라서 메모리 주소가 겹치는 경우에는 ft_memcpy가 아닌 ft_memmove를 사용하는게 안전하다.

2. 문자열 복사할 경우에는 정확한 바이트 계산 필요

문자열의 경우 strlen(src)를 쓸 경우 널문자(\0)가 복사되지 않는다.
따라서 문자열 복사 시에는 strlen(src)+1 또는 sizeof(src)를 사용해야 한다.

profile
공부하는 개발자

0개의 댓글