열렬히.뛰기

ft_memmove

école 42 > libft > ft_memmove

개요

  • src를 num만큼 dest에 옮기는 함수

  • memcpy와는 다른 점이 있다.

  • dest < src라면 뒤에서부터 복사해야 제대로 복사된다.

    앞에서부터 복사하면 '맨 앞의 값'만 복사되기 때문에 뒤에서부터 복사해야 한다.

  • dest >= src라면 앞에서부터 복사해야 제대로 복사된다.

    뒤에서부터 복사하면 '맨 뒤의 값'만 복사되기 때문에 앞에서부터 복사해야 한다.

코드

c
#include "libft.h"

void	*ft_memmove(void *dest, const void *src, size_t len)
{
	unsigned char		*dest2;
	const unsigned char	*src2;
	size_t				i;

	dest2 = (unsigned char *)dest;
	src2 = (const unsigned char *)src;
	i = -1;
	if (src2 < dest2)
	{
		src2 += len;
		dest2 += len;
		while (len > 0)
		{
			*--dest2 = *--src2;
			len--;
		}
	}
	else if (src2 != dest2)
		while (++i < len)
			*dest2++ = *src2++;
	return (dest);
}