void *ft_memmove(void *dest, const void *src, size_t num)
#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;
}
두 함수 모두 복사를 함수이다.
하지만 ft_memmove는 복사할 내용을 버퍼에 복사한 뒤 해당 위치에 가서 버퍼내용을 붙여넣는 방식으로 실행된다.
ft_memcpy는 버퍼에 복사하지 않기 때문에 ft_memmove보다 빠르다.
즉, ft_memcpy는 빠르지만 안전하지 않고 ft_memmove는 느리지만 안전하다.