✅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
💾함수 구현
#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;
}
💡memcpy
와 memmove
- 둘 다 복사의 기능을 가진 함수.
memmove
는 복사할 것을 버퍼에 복사
=> 해당 위치에 가서 버퍼에 복사된 것을 붙여넣음.
따라서, 속도는 memcpy
, 안정성은 memmove