ft_memmove

one·2021년 1월 4일
0

✅memmove

  • src가 가리키는 곳부터 num바이트 만큼 dst이 가리키는 곳으로 옮긴다.

    💡dst < src : 순차적으로 복사

    💡dst > src : 뒤에서부터 복사

💾함수 원형

void *memmove(void *dst, const void *src, size_t num);

💻Parameters

  • dst : 데이터가 복사될 곳을 가리키는 포인터. void*
  • src : 복사할 데이터가 있는 위치를 가리키는 포인터. void*
  • num : 복사할 바이트 수.

💻Return value

  • dst의 포인터

💾함수 구현

#include "libft.h"

void* ft_memmove(void* dst, const void* src, size_t n)
{
	unsigned char* new_dst;
	unsigned char* new_src;

	if (dst == src || n == 0)
		return (dst);
	if (dst < src)
	{
		new_dst = (unsigned char*)dst;
		new_src = (unsigned char*)src;
		while (n--)
			*new_dst++ = *new_src++;
	}
	else
	{
		new_dst = (unsigned char*)dst + (n-1);
		new_src = (unsigned char*)src+ (n-1);
		while (n--)
			*new_dst-- = *new_src--;
	}
	return (dst);
}

💾사용 예시

#include <stdio.h>

int main() {
	char Like[10] = { "ILikeYou" };
	char Hate[10] = { "IHateYou" };
	char str[] = "12345678";

	printf("memmove before : %s\n", Like);
	ft_memmove(Like + 1, Hate + 1, 4);
	printf("memmove after : %s\n", Like);

	printf("memmove before : %s\n", str);
	ft_memmove(str+3, str +1, 3);
	printf("memmove after : %s\n", str);

	return 0;
}

💡memcpymemmove

  • 둘 다 복사의 기능을 가진 함수.
    memmove는 복사할 것을 버퍼에 복사=> 해당 위치에 가서 버퍼에 복사된 것을 붙여넣음.
    따라서, 속도는 memcpy, 안정성은 memmove
profile
늘 호기심을 갖고, 새로운 것에 도전할 것.

0개의 댓글