void *ft_memcpy(void *dest, const void *src, size_t num)
#include "libft.h"
void *ft_memcpy(void *dest, const void *src, size_t num)
{
size_t i;
i = 0;
while (dest == 0 && src == 0)
return (NULL);
while (i < num)
{
((unsigned char *) dest)[i] = ((unsigned char *) src)[i];
i++;
}
return (dest);
}
int main(void)
{
char src[] = "Hello, 42!";
char dest[20];
ft_memcpy(dest, src, sizeof(src)); // '\0'까지 포함해서 복사
printf("복사된 문자열: %s\n", dest); // 출력: Hello, 42!
return 0;
}
ft_memset함수는 src와 dest가 겹치면 안된다.
만약 두 변수의 메모리 주소가 겹치는 경우에는 복사 붙여넣기를 할 때 값이 덮어씌워지는 경우가 발생한다.
예를들어
char str[] = "123456";
ft_memcpy(str + 2, str, 4);
위 코드에선 str + 2와 str이 메모리 영역이 겹치기때문에 문제가 발생한다.
따라서 메모리 주소가 겹치는 경우에는 ft_memcpy가 아닌 ft_memmove를 사용하는게 안전하다.
문자열의 경우 strlen(src)를 쓸 경우 널문자(\0)가 복사되지 않는다.
따라서 문자열 복사 시에는 strlen(src)+1 또는 sizeof(src)를 사용해야 한다.