Dia Egg - Shugo Chara

C

memcpy 함수의 구현

별ㅇI 2023. 10. 13. 18:36
728x90
반응형

memcpy 함수

  • string.h 헤더 파일에  들어있는 함수로 memory + copy가 합쳐진 그대로 메모리의 값을 복사하는 기능을 가진 함수이다. 
  • 원형은 void *memcpy(void *restrict dst, const void *restrict src, size_t n)을 따른다. 
  • 첫번째 인자가 복사받을 메모리를 가리키는 포인터, 두번째 인자가 복사할 메모리를 가리키는 포인터, 세번째가 복사할 데이터값의 길이(byte단위)이다.
  • 주의 할 점은 복사 할 메모리 블록과 복사받을 메모리 블록이 겹쳐있는 경우에는 사용하지 못한다고 한다. 
  • return값은 dst의 원래 값을 반환한다.

memcpy 함수의 구현

void	*ft_memcpy(void *dst, const void *src, size_t n)
{
	size_t			i;
	unsigned char	*n_dst;
	unsigned char	*n_src;

	i = 0;
	if (dst == 0 && src == 0)
	{
		return (0);
	}
	n_dst = (unsigned char *)dst;
	n_src = (unsigned char *)src;
	while (i < n)
	{
		n_dst[i] = n_src[i];
		i++;
	}
	return (dst);
}

// #include<string.h>
// #include<stdio.h>
// int main(void)
// {
//     // int src1[] = { 12,22,32 };
//     // int dest1[3];
// 	// int src2[] = { 12,22,32 };
//     // int dest2[3];
// 	// memcpy(dest1, src1, sizeof(int) * 3);
// 	// ft_memcpy(dest2, src2, sizeof(int) * 3);
// 	// printf("memcpy_src : ");
//     // for (int i = 0; i < 3; ++i)
//     // {
//     //     printf("%d ", src1[i]);
//     // }
// 	// printf("ft_memcpy_src : ");
// 	// for (int i = 0; i < 3; ++i)
//     // {
// 	// 	printf("%d ", src2[i]);
//     // }
//     // printf("\n");
//     // printf("memcpy_dest : ");
//     // for (int i = 0; i < 3; ++i)
//     // {
//     //     printf("%d ", dest1[i]);
//     // }
// 	// printf("ft_memcpy_dest : ");
// 	// for (int i = 0; i < 3; ++i)
//     // {
// 	// 	printf("%d ", dest2[i]);
//     // }
// 	const char src1[] = "applepie";
//     char dest1[] = "peachpie";
// 	const char src2[] = "applepie";
//     char dest2[] = "peachpie";
//     memcpy(0, "", 5);
// 	ft_memcpy(0, "12", 5);
// 	printf("memcpy_src : ");
//     printf("%s \n", src1);
// 	printf("ft_memcpy_src : ");
// 	printf("%s \n", src2);
//     printf("memcpy_dest : ");
//     printf("%s\n", dest1);
// 	printf("ft_memcpy_dest : ");
// 	printf("%s\n", dest2);
//     return 0;
// }

 

int 배열의 경우와 char배열의 경우 모두 테스트를해보았다. 

728x90
반응형

'C' 카테고리의 다른 글

memmove 함수의 구현 (+ memmove함수와 memcpy함수의 차이)  (2) 2023.10.16
strlcpy 함수의 구현  (0) 2023.10.16
restrict란?  (0) 2023.10.13
bzero 함수의 구현  (2) 2023.10.13
memset 함수의 구현  (2) 2023.10.13