➰ 코딩 부트캠프/42 seoul

[0 Circle] Libft - ft_memcpy, ft_memccpy

 사과개발자 2020. 12. 22. 20:54

📌ft_memcpy

src메모리영역에서 dest메모리 영역으로 n byte만큼 복사

void    *ft_memcpy(void *dest, const void *src, unsigned int n);

➕ 매개변수 (Parameters)

  • dest : 채우고자 하는 메모리의 시작 주소
  • src : 복사하려는 메모리의 시작 주소
  • n : 채우고자 하는 바이트의 수

➕ 반환값 (Return)

  • void * : dest의 포인터 반환

➕ 설명 (Description)

strcpy() 함수와의 차이점은

문자열은 문자열의 끝을 Null 바이트로 구분하지만

메모리는 Null 바이트도 데이터이기 때문에 n을 명시적으로 지정해야 한다는 것이다.

➕ 코드 (Code)

 #include "libft.h" 

 void*ft_memcpy(void *dest, const void *src, size_t n)     
 { 
     unsigned int    i;    // unsigned int 형인 n과 비교하기위해 int 가 아닌 unsigned int 로 선언
     char            *tmp; 
     const char      *str; 

     i = -1; 
     tmp = dest; 
     str = src; 

     if (!dest)  //dest 가 비어있을 경우
         return (0); 

     if (!n || dest == src) // n이 0이거나 dest의 주소와 src의 주소가 같을 경우
         return (dest); 

     while (++i < n)   //tmp에 src메모리의 값을 하나씩 넣기
         tmp[i] = str[i]; 

     return (dest); 
 }

📌ft_memccpy

src메모리영역에서 dest메모리 영역으로 n byte만큼 복사

void    *ft_memcpy(void *dest, const void *src, int c, unsigned int n);

➕ 매개변수 (Parameters)

  • dest : 채우고자 하는 메모리의 시작 주소
  • src : 복사하려는 메모리의 시작 주소
  • c : 같은지 확인하려는 문자
  • n : 채우고자 하는 바이트의 수

➕ 반환값 (Return)

  • void *
    • 제대로 copy됬을 시 : NULL
    • c와 같은 문자를 만나 중간에 중단됬을 경우 : 다음문자에 대한 포인터 반환 (값을 복사한 그 다음 index의 dest 주소를 반환)

➕ 설명 (Description)

➕ 코드 (Code)

 #include "libft.h" 

 void*ft_memccpy(void *dest, 
 const void *src, int c, unsigned int n) 
 { 
     char*tmp; 
     const char      *str; 
     unsigned    int i; 

     i = 0; 
     tmp = dest; 
     str = src; 

     if (!dest || !src) 
         return (0); 

     if (!n || dest == src) 
         return (0); 

     while (i < n) 
     { 
         tmp[i] = str[i]; 
         if (str[i] == c) 
             return (&dest[i + 1]); 
        i++; 
     } 

     return (0); 
 }
반응형