libft.h 정리!

조병화·2022년 7월 12일
0

이번에 처음으로 velog에 글을 쓰게 되었다. 새로 알게된 형님 yback이 하는걸 보았는데 재미있어 보인다.
가자!

내가 libft 를 만들면서 어려웠거나, 좀 제대로 알아야 할 것 같은 걸 정리해 보려 한다!! :D

간당!

isalpha, toupper, tolower, isdigit, isalnum, isascii , isprint, strlen, 같은 친구들은 꽤 단순해서 정리할 게 없다ㅋㅋ

**
ft_strchr : 이 함수는 문자열(s)에서 캐릭터(c)를 찾아 그 위치를 리턴해준다. 만약 찾고자하는 문자열이 '\0' 이라면 문자열의 맨 끝 위치를 리턴해준다. 만약 c를 찾지 못했을 경우 null을 리턴한다.

ft_strrchr : 이 함수는 위의 ft_strchr 과 동일하다. 차이는 맨 뒤에서 찾은 친구를 리턴해 준다는 것이다. 마찬가지로 c가 '\0' 일 때는 문자열 맨 뒤 위치를 리턴하고, c를 못찾은 경우 null 을 리턴한다.

ft_memchr : 이 함수 또한 문자열에서 특정 캐릭터의 위치를 찾아 리턴해준다. strchr과의 차이를 잘 모르겠어서 manual 을 잘 읽어보니 차이가 '\0' 일 때의 처리방식이 memchr에는 명시되어 있지 않다는 차이가 있었다. 또한 n byte 만큼의 범위 내에서만 탐색한다는 차이점 또한 존재했다.
**


bzero 는 할당된 공간을 모두 0으로, memset은 원하는 캐릭터로 초기화 해준다.

**
ft_memcmp : memcmp 함수는 두 개의 string을 비교하여 같다면 0을 리턴하고 다르다면 처음으로 달라지는 바이트의 차이를 unsigned char 로 구하여 리턴해준다. 길이 0 이라면 0을 리턴한다.

ft_strncmp : strncmp의 경우도 memcmp 처럼 두 개의 string을 비교한다. 차이점이라면 strncmp의 경우 문자열의 중간에 '\0'이 나오면 비교를 종료해버려 만약 '\0' 이후에 다른 문자들이 있더라도 같다고 리턴해버리는 경우도 존재한다는 것이다.
**

**
ft_memcpy.c : memcpy의 경우는 n 바이트를 src에서 복사해 dst에 복사한다. 만약 src와 dst의 메모리 영역이 겹칠 경우에 대해선 정의가 되어있지 않다. -> 원래는 문제가 생겼었는데 이제는 덮어씌워지는 오류가 발생하진 않는다. 난 그냥 덮어씌워지는 오류가 발생해도 상관없도록 작성했다.
ex) str : test 일 경우 str+2 에 str을 복사한 다면 tetete로 덮어 씌워져서 나오도록 했다.
-> 실제 memcpy의 경우는 tetest로 덮어씌워지지 않은 상태로 나온다. (memmove가 이 역할을 하는 애다 원래는)

ft_memmove.c : memmove 또한 복사하는 함수인데, dst가 src 보다 더 뒤 메모리에 있다면 중복이 혹시라도 일어나 덮어씌워지는 경우가 생길 수 있다. (위 처럼) 이런 경우를 막기 위해 memmove는 dst가 src 보다 더 뒤에 있다면 복사하고자 하는 메모리를 뒤에서부터 복사해 붙여넣는다. 이렇게 하면 덮어씌워지는 문제를 방지할 수 있다!

ft_strlcpy.c : strlcpy 의 역할도 memcpy와 같지만 차이점은 '\0' 이다. strlcpy의 경우 '\0'이 나오면 중지한다. memcpy는 아니당!
**

ft_strnstr.c : strnstr 은 needle 문자열을 haystack 문자열에서 찾아 그 위위치를 반환한다. len 만큼의 범위만큼만 탐색한다. '\0' 뒤에 오는 캐릭터들이 있다면 무시된다.

ft_strlcat.c : 두 문자열을 붙이는 역할을 한다. dest 뒤에 src를 size 만큼 붙인다. 리턴값이 좀 까다로운데, 전부 dst size + src size 이고, 만약ㅇ에 size 의 길이가 dest의 size보다 작을 경우에만 src size + size를 리턴한다.

ft_atoi.c : atoi 함수는 문자열을 숫자로 반환해 주는 역할을 한다. 앞부분에 공백 문자열이 있다면 넘어가고, +, - 부호를 받고 이후 숫자가 아닌 다른 문자가 올때까지 읽어 이를 숫자로 반환한다. (int) 공백 문자열을 다 포함시키지 않고 코드를 짜니 몇몇 테스트 케이스가 문제가 생기더라. 잘 신경써서 하면 될 것 같다.

ft_calloc.c : calloc은 말록으로 할당 한 메모리를 모두 0으로 초기화 해주는 역할을 한다. count 가 할당할 개수, size가 할당할 타입? 으로 이해했다. 따라서 malloc을 (count size) 만큼 해주었다. char 배열을 malloc 할 때 (n sizeof(char)) 이렇게 해주는 거처럼 n 이 count, sizeof(char) 가 size 가 되는 것! 만약 int 형 배열을 할당해주는 거면 size가 4가 되겠지? 문제는 어느 한 테스터에서 계속 한 케이스가 에러가 난 것이다. 0으로 초기화 해주는 걸 bzero 로도, memset으로도 다 해봤는데도 안되었다. 문제는 그게 아니라 count나 size가 size_max (unsigned long 의 최대 값)이상으로 들어올 때 문제가 생기는 것이어서 그 때 널을 반환해 주었다.
-> unsigned long을 쓰는 이유는, size_t가 unsigned int 또는 unsigned long인데, 요즘 64비트 컴퓨터는 대부분 unsigned long이라서 그렇다고한다.

ft_strdup.c : strdup는 src 를 입력으로 받아 다른 메모리에 할당하고 복사한 수 그 문자열의 포인터를 반환한다. 만약 메모리가 불충분하다면 null이 반환된다.

=-----------여기서부터는 PART2 !!! ----------------=

ft_substr.c : substr 함수는 문자열 s 에서 start 에서부터 len 만큼을 잘라내 새로운 문자열을 만드는 함수이다.

ft_strjoin.c : strjoin 함수는 s1 뒤에 s2를 붙인 새로운 문자열을 만들어 리턴해준다. 만약 할당에 실패했다면 null을 리턴한다. 문자열 맨 뒤에 '\0' 넣고 끝내자!

ft_strtrim.c : strtrim 함수는 문자열 s1 에서 set 내 에서 분리자를 찾아 기준으로 맨 앞과 뒤를 잘라낸다.

ft_split.c : 내 코드가 더러움

ft_itoa.c :

profile
yback주인님 미피킹!

0개의 댓글