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 |