파도가 칠 때는 서핑을

Soon as possible

Wait!

공부/42Seoul

[0 Circle] Libft

hyeonhki 2021. 3. 5. 15:22
728x90

✨ 함수 정리

👉 Part 1.

기본 함수 구조 매개변수 기능 반환값 주의사항
void *ft_memset 메모리 시작 주소, 초기화 값, 크기 메모리를 특정 값으로 초기화 초기화한 메모리 시작 주소 초기화 값이 int 형이지만 내부에서 unsigned char 로 변환됨
void ft_bzero 메모리 시작 주소, 크기 메모리를 0으로 초기화 - -
void *ft_memcpy dest 주소, src 주소, 복사할 크기 dest에 src를 크기만큼 복사 복사된 dest strcpy와 다르게 널이 들어가도 복사
void *ft_memccpy dest, src, 특정값, 복사할 크기 dest에 src를 복사,src 값이 특정값과 값다면 복사 중단 복사한 곳 바로 다음 주소 반환, 특정값을 만나지 못하면 0 -
void *ft_memmove dest, src, 이동할 크기 메모리 블록을 옮긴다 dest시작 주소 반환 dest와 src의 메모리 값을 잘 비교하고 옮겨야 한다.
겹쳐있다면 복사를 시작하는 지점(앞,뒤)에 따라 값이 달라지기 때문!
void *ft_memchr 시작 주소, 특정값, 크기 특정값(문자)을 찾아낸다 찾으면 그 주소, 아니면 0 unsigned char로 비교할 것
int ft_memcmp 대상1, 대상2, 비교할 크기 두 주소가 가리키는 값을 비교 *s1 - *s2 -
unsigned int ft_strlen 문자열 주소 문자열 길이 길이 반환 int가 아닌 unsigned int로 반환하는 게 이후에 편하다
int ft_isalph int c 알파벳인지 확인 1 : 0 -
int ft_isdigit int c 숫자인지 확인 1 : 0 -
int ft_isalnum int c 숫자나 알파벳인지 확인 1 : 0 -
int ft_isascii int c ASCII 범위 내 인지 확인 1 : 0 -
int ft_isprint int c 출력 가능 문자인지 확인 1 : 0 -
int ft_toupper int c 소문자를 대문자로 소문자는 대문자로, 대문자는 대문자로 알파벳 한정
int ft_tolower int c 대문자를 소문자로 소문자는 소문자로, 대문자는 소문자로 알파벳 한정
char *ft_strchr 대상 문자열, 특정값 문자 검색 있으면 그 주소, 없으면 0 -
char *ft_strrchr 대상 문자열, 특정값 문자 검색(뒤에서부터) 있으면 그 주소, 없으면 0 -
int ft_strncmp 문자열1, 문자열2, 비교할 크기 문자열에서 n개까지 비교 두 값 차이만큼 반환 복사할 크기가 0이면 0반환
unsigned int ft_strlcpy dest, src, 크기 dest에 src를 n개 복사 무조건 src의 길이 unsigned int 의 값은 0이하가 되면 오류가 생긴다
unsigned int ft_strlcat dest, src, 크기 dest 뒤에 src를 (n-dest-1)개 붙임 복사하고자 했던 길이 마지막에 널 값도 들어가야하고, n이 dest길이 이상이어야 붙일 수 있다는 점
ft_strnstr 대상 문자열, 찾고자 하는 문자열, 찾는 범위 문자열 안에 문자열을 찾음 찾은 문자열의 시작 주소, 없으면 0 찾는 범위에서 찾고자 하는 문자열의 길이를 고려해야한다.
ft_atoi 문자열 문자열에 나와있는 숫자를 정수형으로 바꾼다 변환한 정수형 -
ft_calloc 개수, 크기 크기 * 개수 만큼 할당하고 0으로 초기화 할당하고 초기화한 메모리 시작 주소 0일 때도 1바이트 할당
ft_strdup 문자열 메모리에 공간을 할당하고 문자열을 그 메모리에 복제한다. 할당한 공간의 시작 주소 -

👉 Part 2.

기본 함수 구조 매개변수 기능 반환값 주의사항
char *ft_substr 문자열, 시작 인덱스, 할당할 길이 시작 인덱스부터 하위문자열을 새로 할당하여 복사 새로 할당한 문자열의 시작 주소 시작 인덱스가 대상 문자열의 길이보다 크거나 같으면 빈문자열 할당
char *ft_strjoin 문자열1, 문자열2 두 문자열을 합친다! 합친 문자열의 시작 주소 반환 -
char *ft_strtrim 대상 문자열, 제외문자열 앞과 뒤에서 살펴서 제외문자열 안에 들어간 문자들을 제외하고 새로 할당 할당한 문자열 시작 주소 앞,뒤 순서대로!, 대상 문자열과 제외문자열이 널일 때 널 반환
char **ft_split 대상 문자열, 문자 문자를 기준으로 대상 문자열을 나누어서 2차원 배열 할당 할당한 2차원 배열 시작 주소 할당할 문자열이 0일때 0 할당하고 반환
char *ft_itoa 정수형 문자열로 할당 할당 문자열 시작 주소 -
char *ft_strmapi 문자열, function 문자열 새로 할당 후 문자열 안 각 문자에 function 적용 할당한 문자열 시작 주소 -
ft_putchar_fd 문자, 파일디스크립터 파일디스크립터에 문자 출력 - -
ft_putchar_fd 문자열, 파일디스크립터 파일디스크립터에 문자열 출력 - -
ft_putendl_fd 문자열, 파일디스크립터 개행문자를 포함한 문자열 출력 - -
ft_putnbr_fd 정수형, 파일디스크립터 파일디스크립터에 숫자출력 - -

👉 Bonus.

기본 함수 구조 매개변수 기능 반환값 주의사항
t_list *ft_lstnew 새로운 요소를 만들 content 새로운 리스트 할당하고 content값으로 요소 초기화, next는 0 새로운 요소 -
void ft_lstadd_front 첫 번째 링크 리스트의 포인터 주소, 리스트에 추가되기 위한 요소의 포인터 주소 리스트의 시작부분에 요소 new를 추가 - new리스트 뒤에 lst를 붙여주고 lst의 첫 주소를 new로 옮김
int ft_lstsize 리스트의 시작 리스트의 요소 개수를 센다 리스트의 길이를 반환 -
t_list *ft_lstlast 리스트의 시작 리스트의 마지막 요소를 반환 리스트의 마지막 요소 -
void ft_lstadd_back 첫번째 연결리스트의 포인터 주소, 요소가 될 포인터 주소 리스트의 끝에 'new' 요소를 추가 - -
void ft_lstdelone free할 요소, content를 삭제하는데 사용되는 함수의 주소 매개변수로 요소를 가져오고 매개변수로 주어진 함수 'del'을 적용시켜 요소의 content의 주소를 free하고 난 뒤 요소를 free. - 'next'의 주소는 free되지 않아야함.
void ft_lstclear 요소의 포인터 주소, 요소의 content를 삭제하는데 사용되는 함수의 주소 함수 'del'과 free를 사용하여, 주어진 요소와 해당 요소의 모든 후속 요소를 삭제하고 free한다. - -
void ft_lstiter 요소의 포인터 주소, 리스트에 반복적으로 사용되는 함수의 주소 리스트의 각 요소의 content에 함수 'f' 적용 - -
t_list *ft_lstmap 요소의 포인터 주소, 리스트에 반복적으로 사용되는 함수의 주소, content 삭제용 함수의 주소 리스트 각 요소의 content에 'f' 적용, 함수 'f'를 연속적으로 적용시켜 새로운 리스트 만듦. 필요한 경수 'del'로 요소의 content 삭제 새로운 리스트, 할당 실패시 null -

💢 테스트 결과, 주의해야 했던 함수들

  • ft_strnstr : 입력 받는 피라미터들이 0일 경우 segment fault가 나와야한다
    즉, 조건 처리를 하지 말 것!
    또한, unsigned int를 사용할 경우 조건 처리하다가 자료형이 음수가 나올 경우가 없게 함수를 짜야한다!

  • ft_strtrim : 앞뒤로 울타리라고 생각하면 된다. 앞 뒤 순서대로 제외문자열이 반복으로 나오는 것 제외해주고 제외문자 이외에 문자가 오면 신경쓰지 않아도 된다.
    즉, ab가 제외문자열이고 대상문자열이 abcabcba라면 반환 문자열은 cabc가 나와야한다.
    앞,뒤 연속적 제거. 잊지말자.
    대상문자열과 제외문자열이 널일 경우, 널 처리.

  • ft_split : 문장이 아예 없을 경우, while문이든 뭐든 처리하는 조건문을 건너 뛰고 할당된 0 인덱스에 널 값을 넣고 종료!

  • ft_lstmap : 각 구조체의 content에 함수를 적용하는 중 적용 실패시, 앞서 함수 f함수가 적용된 모든 구조체 메모리 해제 후 NULL 반환!

  • ft_memchr : char와 unsigned char 는 메모리에서 읽는 방식이 다르고, memchr 동작 자체가 unsigned char 로 비교하여 동작하므로 비교시 형변환을 unsigned char로 하지 않으면 무리넷에서 터질 수 있음

728x90

'공부 > 42Seoul' 카테고리의 다른 글

[2 Circle] ft_server 개념부터 구현까지  (0) 2021.03.30
[1 Circle] ft_printf 정리  (0) 2021.03.18
[1 Circle] get next line 설명 및 해결  (0) 2021.03.17
[1 Circle] netwhat  (0) 2021.03.05