ft_memmove

jaehlee·2025년 4월 25일

Libft

목록 보기
4/26

1. ft_memmove함수란?


ft_memcpy처럼 src주소로 부터 num바이트만큼 dest로 복사하는 함수이지만, 주소가 겹칠 경우를 대비하여 src의 데이터를 다른곳에 복사해둔 뒤 dest로 복사하는 함수이다.

2. 함수 프로토타입

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

3. 함수 구현

#include "libft.h"

void	*ft_memmove(void *dest, const void *src, size_t num)
{
	unsigned char	*buf_src;
	unsigned char	*buf_dest;
	size_t			i;

	i = 0;
	buf_src = (unsigned char *) src;
	buf_dest = (unsigned char *) dest;
	if (buf_src == buf_dest || num == 0)
		return (dest);
	if (buf_dest < buf_src)
	{
		while (i < num)
		{
			buf_dest[i] = buf_src[i];
			i++;
		}
	}
	else
	{
		while (num--)
			buf_dest[num] = buf_src[num];
	}
	return (buf_dest);
}

dest가 src보다 작으면 순차적으로 복사된다
dest가 src보다 크면 뒤에서부터 복사된다.

사용예시

int main(void)
{
    char str[] = "123456";

    // 겹치는 영역 복사: str의 처음 4바이트를 str+2 위치에 복사
    ft_memmove(str + 2, str, 4);

    printf("결과: %s\n", str); // 예상 출력: "121234"
    return 0;
}

4. ft_memcpy와의 차이점

두 함수 모두 복사를 함수이다.
하지만 ft_memmove는 복사할 내용을 버퍼에 복사한 뒤 해당 위치에 가서 버퍼내용을 붙여넣는 방식으로 실행된다.
ft_memcpy는 버퍼에 복사하지 않기 때문에 ft_memmove보다 빠르다.
즉, ft_memcpy는 빠르지만 안전하지 않고 ft_memmove는 느리지만 안전하다.

profile
공부하는 개발자

0개의 댓글