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 |