➰ 코딩 부트캠프/42 seoul

[0 Circle] Libft - ft_memmove, ft_memchr

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

📌ft_memmove

메모리를 이동하는 함수

void*ft_memmove(void *dest, const void *src, unsigned int len) ;

➕ 매개변수 (Parameters)

  • dest : 이동하여 저장할 메모리의 시작 주소
  • src : 이동하려는 메모리의 시작 주소
  • n : 이동할 바이트의 수

➕ 반환값 (Return)

  • void * : dest의 포인터 반환

➕ 설명 (Description)

memcpy와 같이 메모리의 내용을 다른 메모리로 옮기는 함수이지만 memmove 함수는 이동할 데이터를 임시 버퍼에 옮긴 후 대상 버퍼오 이동하는 과정을 거치기 때문에 두 메모리가 근점해 있더라도 중첩현상이 발생하지 않는 장점이 있다.

➕ 코드 (Code)

#include "libft.h" 

void*ft_memmove(void *dest, const void *src, unsigned int len) 
{ 
    unsigned inti; 
    unsigned char*tmp; 
    unsigned const char *str; 

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

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

    if (dest < src) 
        while (++i < len) 
            tmp[i] = str[i]; 
    else 
        while (++i < len) 
            tmp[len - 1 - i] = str[len - 1 - i]; 

    return (dest); 
}

📌ft_memchr

메모리 영역에서 임의의 문자를 겸색하다가 발견되면 그 위치의 포인터를 반환

void    *ft_memchr(void *ptr, int value, unsigned int num) ;

➕ 매개변수 (Parameters)

  • ptr : 검색을 수행할 메모리의 시작 주소
  • value : 검색할 값 (int 로 값이 전달되지만 함수 내부적으로는 한 바이트씩 비교하기 때문에 이 값은 unsigned char 로 변환되어 사용)
  • num : 검색을 시작한 부분 부터 검색을 수행할 만큼의 바이트 수

➕ 반환값 (Return)

  • void * : 메모리 블록에서 value 와 일치하는 값이 있다면 그 곳의 주소를 리턴하고 값을 찾지 못한다면 NULL 을 리턴

➕ 설명 (Description)

➕ 코드 (Code)

 #include "libft.h" 

 void    *ft_memchr(void *ptr, int value, unsigned int num) 
 { 
     unsigned int    i; 
     unsigned char   *str; 

     i = -1; 
     str = ptr; 

     while (++i < num) 
     { 
         if (str[i] == (unsigned char)value) 
            return (&ptr[i]); 
     } 
     return (0); 
 }
반응형