> [!date] published: 2021-05-13
## ๐ protect vs. not-protect
part2์์ ๊ตฌํํด์ผ ํ๋ ํจ์๋ค์ ํน๋ณํ ์ ํจ์๊ฐ ์๋ ๊ฒ์ด ์๋๋ผ ํน์ ํ ๊ธฐ๋ฅ์ ์ํํ๋ ๋๋ง์ ํจ์๋ค์ ๊ตฌํํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์๋ฌ ์
๋ ฅ์ ๊ดํ ์ฒ๋ฆฌ๋ ๊ตฌํํ๋ ์ฌ๋ ์ทจํฅ์ ๋ง๊ฒ ๊ตฌํํ๋ฉด ๋๋ค.
์ด๊ฒ ์ผ๋ฐ์ ์ธ ์ฉ์ด์ธ์ง, ์๋๋ฉด Libft ํ
์คํฐ์ธ unit-test์์ ์์๋ก ๋ง๋ ๊ฐ๋
์ธ์ง ๋ชจ๋ฅด๊ฒ ์ง๋ง(null protected function์ด๋ผ๊ณ ๊ฒ์ํด ๋ดค์ ๋ ํน๋ณํ ๋์ค๋ ๊ฒฐ๊ณผ๊ฐ ์์ด ๋ณด์) ํฌ์ธํฐ๋ฅผ ๋งค๊ฐ๋ณ์๋ก ๋ฐ๋ ํจ์์์ `NULL`ํฌ์ธํฐ๊ฐ ๋ค์ด์์ ๋ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๋ฐ๋ผ์ protect, not-protect๋ก ๊ตฌ๋ถํ๋ค๋ ๊ฒ ๊ฐ๋ค.
- `NULL`์ด ๋งค๊ฐ๋ณ์๋ก ๋ค์ด์์ ๋ segment fault, bus error... ๋ฑ์ ์๋ฌ๋ฅผ ๋ฑ์ด๋ด๋ฉด not-protect๋ ํจ์
- `NULL`์ด ๋งค๊ฐ๋ณ์๋ก ๋ค์ด์์ ๋ `NULL`์ ๋ฐํํ๋ค๋๊ฐ ํด์ ๋น์ ์์ ์ธ ์ข
๋ฃ๋ฅผ ๋ง์ผ๋ฉด protect ๋ ํจ์
์ฒ์์๋ ๋น์ ์์ ์ธ ์
๋ ฅ์ด ๋ค์ด์ค๋ฉด ํจ์๋ฅผ ๋น์ ์์ ์ผ๋ก ์ข
๋ฃํด์ ์ฌ์ฉ์์๊ฒ ์ด ์
๋ ฅ์ด ๋น์ ์์ ์์ ์๋ฆฌ๊ณ ํจ์ ์งํ์ ์ค๋จํด์ผ ํ๋ค๊ณ ์๊ฐํด์ protect๋ฅผ ์ํ๋ ์ชฝ์ผ๋ก part 2์ ํจ์๋ค์ ๊ตฌํํ์๋๋ฐ
์๋ชป๋ ์
๋ ฅ์ด ๋ค์ด์์๋ ํจ์ ์คํ์ ์์ ํ ์ค๋จํด ๋ฒ๋ ธ์ ๋ ์ค๋ ํผํด๊ฐ ์๋ชป๋ ์
๋ ฅ์์ ์ค๋ ํผํด๋ณด๋ค ๋ ํด ์๋ ์๋ค๋ ๋ค๋ฅธ ๋ถ์ ๋ง์์ ์ค๋๋์ด ๋ฒ๋ ค์...ใ
ใ
๋ค์ protect๋ฅผ ํ๋ ์ชฝ์ผ๋ก ๋ชจ๋ ์์ ํ๋ค.
์ด ๋ถ๋ถ์ ๋ํ์ค๋ฅผ ์ ํ ์๋ง ์๋ค๋ฉด ์์ ์ด ์ํ๋ ๋ฐฉํฅ์ผ๋ก ๊ตฌํ์ ํ๋ฉด ๋ ๊ฒ ๊ฐ๋ค..!
## ๐ ft_substr
```c
char *ft_substr(char const *s, unsigned int start, size_t len);
```
**s๋ฌธ์์ด์ start์ธ๋ฑ์ค์์๋ถํฐ ์ต๋ len๋ฐ์ดํธ๋ฅผ ๋ฝ์์(?) ์๋ก์ด ๋ถ๋ถ ๋ฌธ์์ด์ ๋ง๋ค๊ณ , ๊ทธ ๋ฌธ์์ด์ ์์ ์ฃผ์ ๋ฐํํ๊ธฐ**
[์ฝ๋](https://github.com/yoouyeon/42Cursus/blob/main/Libft/ft_substr.c)
### โจ ์์ธ ์ฒ๋ฆฌ
1. **s๊ฐ `NULL`์ผ ๊ฒฝ์ฐ**
์ฒ๋ฆฌํ ์ ์๋ ๋ฌธ์์ด์ด ์์ผ๋ฏ๋ก `NULL`์ ๋ฐํํ๋ค.
2. **s์ ๊ธธ์ด๊ฐ start๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ๊ฒฝ์ฐ || len == 0 ์ธ ๊ฒฝ์ฐ**
์ฒ๋ฆฌ๋ ๊ฐ๋ฅํ์ง๋ง ์ ์๋ฏธํ ๋ฌธ์์ด์ ์์ฑํ ์๋ ์๊ธฐ ๋๋ฌธ์ ๋น ๋ฌธ์์ด์ ๋ฐํํ๋ค.
3. **malloc์ด ์คํจํ ๊ฒฝ์ฐ**
`NULL`์ ๋ฐํํ๋ค.
### โจ ํจ์ ์งํ ๊ณผ์
1. ์์ธ์ฌํญ (1, 2) ์ฒ๋ฆฌ
2. `slen`(s ๋ฌธ์์ด์ ๊ธธ์ด)๋ฅผ ๊ตฌํด์ค ํ์ `min(len, slen - start) + 1`๋งํผ์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น
3. `s ๋ฌธ์์ด์ด ๋๋๊ธฐ ์ ||๋ณต์ฌํ ๋ฌธ์์ ๊ฐ์๊ฐ len๊ฐ ์ดํ` ๊น์ง ๋ฌธ์ ๋ณต์ฌํด ๋ฃ๊ธฐ
4. ๋ง์ง๋ง ์ธ๋ฑ์ค์ `NULL` ๋ฌธ์ ๋ฃ์ด์ฃผ๊ธฐ
### โจ ๊ตฌํ ์ ๊ณ ๋ ค์ฌํญ
1. `min(len, slen - start)`์ ์ด์
len์ด ๋ถ๋ถ๋ฌธ์์ด์ ์ต๋๊ธธ์ด์ด๊ธฐ ๋๋ฌธ์ด๋ค.
๋ง์ฝ ์์ฑํ ์ ์๋ ๋ฌธ์์ด์ ๊ธธ์ด๊ฐ len๋ณด๋ค ์์ ๊ฒฝ์ฐ์๋ ๊ทธ๋งํผ๋ง ํ ๋นํด์ ๋ฌธ์์ด์ ์์ฑํด์ผ ํ๋ค.
์ฌ์ค ๋น๊ตํ์ง ์๊ณ ๋๋ํ๊ฒ len๋งํผ๋ง ํ ๋นํด์ค๋ ํต๊ณผํ๋ ๊ฒ ๊ฐ๊ธด ํ๋๋ฐ ๋๋ ๋ญ๊ฐ ์ฌ์ ๋กญ๊ฒ ํ ๋นํด์ฃผ๋๊ฒ ์กฐ๊ธ ์ ๊ฒฝ์ฐ์ฌ์ ์ถ๊ฐํด์คฌ๋ค.
2. s๋ฌธ์์ด์ ๋ด์ฉ์ ์๋ก์ด ๋ฌธ์์ด์ ๋ณต์ฌํ๋ ํํ์ด๋ฏ๋ก `ft_strlcpy`๋ฅผ ํ์ฉํ๋ฉด ๋ณด๋ค ๊น๋ํ ์ฝ๋๋ฅผ ์งค ์ ์์ ๊ฒ ๊ฐ๋ค๋ ์๊ฐ์ ํ๋ค.
## ๐ ft_strjoin
```c
char *ft_strjoin(char const *s1, char const *s2);
```
**s1 ๋ฌธ์์ด ๋ค์ s2 ๋ฌธ์์ด์ ๋ถ์ธ ํํ์ ๋ฌธ์์ด์ ์์ฑํด์ ๋ฐํํ๋ค.**
[์ฝ๋](https://github.com/yoouyeon/42Cursus/blob/main/Libft/ft_strjoin.c)
### โจ ์์ธ ์ฒ๋ฆฌ
1. **s1๊ณผ s2 ๋ชจ๋ `NULL`์ผ ๊ฒฝ์ฐ**
์ฒ๋ฆฌํ ์ ์๋ ๋ฌธ์์ด์ด ์์ผ๋ฏ๋ก `NULL`์ ๋ฐํํ๋ค.
2. **s1๋ง `NULL`์ธ ๊ฒฝ์ฐ**
s2๋ง ๋ณต์ ํด์ ๋ฐํํ๋ค.
3. **s2๋ง `NULL`์ธ ๊ฒฝ์ฐ**
s1๋ง ๋ณต์ ํด์ ๋ฐํํ๋ค.
4. **malloc ์คํจํ ๊ฒฝ์ฐ**
`NULL`์ ๋ฐํํ๋ค.
### โจ ํจ์ ์งํ ๊ณผ์
1. ์์ธ ์ํฉ (1, 2, 3) ์ฒ๋ฆฌ
2. s1๊ณผ s2์ ๊ธธ์ด๋ฅผ ์ฐ๋ค. (with `ft_strlen`)
3. (s1์ ๊ธธ์ด + s2์ ๊ธธ์ด + 1)๋งํผ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํด ์ค๋ค.
4. ํ ๋นํ ๋ฉ๋ชจ๋ฆฌ์ s1์ ๋ณต์ฌํ๋ค. (with `ft_strlcpy`)
5. ๊ทธ ๋ค์ s2๋ฅผ ๋ถ์ธ๋ค. (with `ft_strlcat`)
### โจ ๊ตฌํ ์ ๊ณ ๋ ค์ฌํญ
1. ์๋ธ์ ํธ์์๋ ์ธ๊ธ๋์๋ฏ์ด part 1์์ ๊ตฌํํด ๋ ํจ์๋ฅผ part 2์์ ํ์ฉํ ์ ์๋ค.
๋ฌธ์์ด์ ๋ณต์ฌํ๋ ๊ณผ์ ์ `ft_strlcpy`๋ก ๋์ฒดํ ์ ์๊ณ ๋ฌธ์์ด์ ๋ถ์ด๋ ๊ณผ์ ์ `ft_strlcat`์ผ๋ก ๋์ฒดํ ์ ์๋ค.
ํ๊ฐ๋ฅผ ๋ค๋๋ค ๋ณด๋ฉด ์ฝ๋๊ฐ ๊ธธ์ด์ ธ์ ๊ฐ๋
์ฑ์ด ๋จ์ด์ง๋ค๋ ๊ณ ๋ฏผ์ ํ๋ ๋๋ฃ๋ค์ด ๋ง์๋๋ฐ ๊ณผ์ ์ ๋ชฉ์ ์ ์ ๊ธฐ์ตํด์ ์ค๋ณต๋๋ ์ฝ๋๋ฅผ ์์ฑํ์ง ์๊ฒ ํ๋ฉด ๋ณด๋ค ํจ์จ์ ์ธ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ ๊ฒ ๊ฐ๋ค.
2. `ft_strlcat`๊ณผ `ft_strlcpy`์ ๋ง์ง๋ง ๋งค๊ฐ๋ณ์์ ์ฃผ์ํ์.
`ft_strlcat`์ ๋ง์ง๋ง ๋งค๊ฐ๋ณ์๋ **ํจ์๊ฐ ๋ฐํํ ๋ฌธ์์ด์ ๊ธธ์ด + 1 (`NULL` ๋ฌธ์ ํฌ๊ธฐ)** ์ด๋ค. ๋ฐ๋ผ์ (s1์ ๊ธธ์ด + s2์ ๊ธธ์ด + 1)์ ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌํด์ฃผ์๋ค.
`ft_strlcpy`์ ๋ง์ง๋ง ๋งค๊ฐ๋ณ์๋ **๋ณต์ฌํ ๋ฌธ์์ ๊ฐ์ + 1 (`NULL` ๋ฌธ์ ํฌ๊ธฐ)** ใด์ด๋ค. ๋ฐ๋ผ์ (s1์ ๊ธธ์ด + 1)์ ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌํด์ฃผ์๋ค.
## ๐ ft_strtrim
```c
char *ft_strtrim(char const *s1, char const *set);
```
**s1์ ์, ๋ค์์ set์ ํฌํจ๋์ด ์๋ ๋ฌธ์๋ค์ ๋ชจ๋ ์ ๊ฑฐํ ํํ์ ๋ฌธ์์ด์ ์์ฑํ์ฌ ๋ฐํํ๋ค.**
์) s1: "aabcdabdcaab" set: "ab" => "cdbabdc"
[์ฝ๋](https://github.com/yoouyeon/42Cursus/blob/main/Libft/ft_strtrim.c)
### โจ ์์ธ ์ฒ๋ฆฌ
1. **s1์ด `NULL`์ผ ๊ฒฝ์ฐ**
์ฒ๋ฆฌํ ๋ฌธ์์ด์ด ์์ผ๋ฏ๋ก `NULL`์ ๋ฐํํ๋ค.
2. **set์ด `NULL`์ผ ๊ฒฝ์ฐ**
์ ๊ฑฐํ ๋ฌธ์๊ฐ ์์ผ๋ฏ๋ก s1์ ๋ณต์ ํ์ฌ ๋ฐํํ๋ค
3. **s1์ ๋ชจ๋ ๋ฌธ์๊ฐ set์ ํฌํจ๋ ๊ฒฝ์ฐ**
s1์ ๋ชจ๋ ๋ฌธ์๊ฐ ์ ๊ฑฐ๋๋ฏ๋ก ๋น ๋ฌธ์์ด์ ๋ฐํํ๋ค.
4. **malloc ์คํจํ ๊ฒฝ์ฐ**
`NULL`์ ๋ฐํํ๋ค.
### โจ ํจ์ ์งํ ๊ณผ์
1. ์์ธ ์ํฉ (1, 2) ์ฒ๋ฆฌ
2. s1 ๋ฌธ์์ด์ ์์๊ณผ ๋์ผ๋ก ์์ ํฌ์ธํฐ (start), ๋ ํฌ์ธํฐ (end) ์ค์
3. ๋ฌธ์์ด์ ์์์ set์ ํฌํจ๋ ๋ฌธ์๊ฐ ๋ฑ์ฅํ์ง ์์ ๋ ๊น์ง start ์ด๋์ํค๊ธฐ
4. ์์ธ ์ํฉ (3) ์ฒ๋ฆฌ
5. ๋ฌธ์์ด์ ๋ค์์ set์ ํฌํจ๋ ๋ฌธ์๊ฐ ๋ฑ์ฅํ์ง ์์ ๋ ๊น์ง end ์ด๋์ํค๊ธฐ
6. ๋ฌธ์์ด์ ๊ธธ์ด ๊ณ์ฐํ๊ณ (`len = end - start + 1`) ๋ฉ๋ชจ๋ฆฌ ํ ๋นํ๊ธฐ
7. ํ ๋นํ ๊ณต๊ฐ์ start๋ถํฐ len๋งํผ์ ๋ฌธ์ ๋ณต์ฌํ๊ธฐ (with `ft_strlcpy`)
### โจ ๊ตฌํ ์ ๊ณ ๋ ค์ฌํญ
1. ๋ชจ๋ ๋ฌธ์๊ฐ ์ญ์ ๋๋ ์ํฉ ํ์
ํ๊ธฐ
์ฒ์์๋ start > end ์ธ ์ํฉ์์ ๋ชจ๋ ๋ฌธ์๊ฐ ์ญ์ ๋จ์ ํ์ธํ๊ณ ๋น ๋ฌธ์์ด์ ๋ฐํํ๋ ๋ฐฉ๋ฒ์ ํ์๋๋ฐ ์ค์ ๋ก ๋ชจ๋ ๋ฌธ์๊ฐ ์ญ์ ๋๋ ์ํฉ์์ ์๊พธ abort๊ฐ ๋ ์ ์์ธ์ ์ฐพ์๋ณด์๋๋ ๋ฌธ์ ๋ end๋ฅผ ์์ง์ด๋ ์ํฉ์์ end๋ฅผ ํฌ์ธํฐ๋ฅผ ์ด์ฉํด์ ์์ง์ด๋ค๋ณด๋ end๊ฐ ๋ฌธ์ฅ ๋(๋ฌธ์ฅ์ ์์๋ถ๋ถ)์ ๋์ด๊ฐ๋ ์ํฉ์์ ๋ฐ๋ณต์ ๋ฉ์ถ์ง ๋ชปํ๋ ๊ฒ์ด์๋ค.
๊ธธ์ด๋ฅผ ๋จผ์ ์ฌ์ ๊ธธ์ด๋ฅผ ์ค์ฌ๊ฐ๋ฉด์ ๋ชจ๋ ๋ฌธ์๊ฐ ์ญ์ ๋์๋์ง ํ์ธํด๋ณด๋ ๋ฑ ์ฌ๋ฌ๊ฐ์ง ๋ฐฉ๋ฒ์ ์๊ฐํด๋ณด๊ธด ํ์๋๋ฐ start๋ฅผ ์์ง์ด๋๋ฐ ์์ด์๋ ๋ฌธ์ ๊ฐ ์์๊ธฐ ๋๋ฌธ์ ๊ทธ๋ฅ start๋ฅผ ์์ง์ธ ๋ค์์ ๋ชจ๋ ๋ฌธ์๊ฐ ์ญ์ ๋์๋์ง (start๊ฐ `NULL`์ ๋๋ฌํ๋์ง)๋ฅผ ํ์ธํด ๋ณธ ํ์ end๋ฅผ ์์ง์ด๋ ๊ฒ์ด ๊ฐ์ฅ ๊ฐ๋จํ๊ฒ ํ์ธํ ์ ์๋ ๋ฐฉ๋ฒ์ด์๋ค.
2. ํจ์์ ๊ธฐ๋ฅ์ ์ดํดํ๋๋ฐ ์ด๋ ค์์ด ์์๋ค. set์ ํฌํจ๋ ๋ฌธ์๋ค์ ๋ชจ๋ s1์์ ์ ๊ฑฐํ๋ ๊ฒ์ด ์๋๋ผ ์ ๋ค์ ์๋ ๋ฌธ์๋ค (set์ ํฌํจ๋์ด ์์ง ์์ ๋ฌธ์ ์์ชฝ์ ์๋ ๋ฌธ์๋ ๊ณ ๋ คํ ํ์๊ฐ ์์)๋ง ์ ๊ฑฐํ๋ฉด ๋๋ ๊ฒ์ด๋ค. (์์ ์ ์ด๋ ์์ ์ฐธ๊ณ )
## ๐ ft_split
```c
char **ft_split(char const *s, char c);
```
**s ๋ฌธ์์ด์ c ๋ฌธ์์ด์ ๊ธฐ์ค์ผ๋ก ๋๋์ด์ ๋ง๋ค์ด์ง ๋ฌธ์์ด์ ๋ฐฐ์ด์ ๋ฐํํ๊ธฐ.**
[์ฝ๋](https://github.com/yoouyeon/42Cursus/blob/main/Libft/ft_split.c)
### โจ ์์ธ ์ฒ๋ฆฌ
1. **s๊ฐ `NULL`์ธ ๊ฒฝ์ฐ**
`NULL`์ ๋ฐํํ๋ค.
2. **๋ฌธ์์ด ๋ฐฐ์ด์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ด ์คํจํ ๊ฒฝ์ฐ**
`NULL`์ ๋ฐํํ๋ค.
3. **๋ฌธ์์ด์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ด ์คํจํ ๊ฒฝ์ฐ**
๊ทธ๋์ ํ ๋นํด ์ค ๋ฉ๋ชจ๋ฆฌ๋ค์ ๋ชจ๋ ํด์ ํด ์ค ๋ค์์ `NULL`์ ๋ฐํํ๋ค. (`all_free` ํจ์)
### โจ ํจ์ ์งํ ๊ณผ์
1. ์์ธ ์ํฉ(1) ์ฒ๋ฆฌ
2. ๋ง๋ค์ด์ง ๋ฌธ์์ด์ ๊ฐ์๋ฅผ ์ธ์ด์ค๋ค (`get_cnt_strs`) 3. s์์ c๊ฐ ๋ฑ์ฅํ์ง ์์ ๋๊น์ง ์ธ๋ฑ์ค๋ฅผ ์ด๋์ํจ๋ค. 4. c๊ฐ ์๋ ๋ฌธ์๊ฐ ๋ฑ์ฅํ ๊ฒฝ์ฐ cnt๋ฅผ ๋๋ ค์ฃผ๊ณ c๊ฐ ๋ฑ์ฅํ์ง ์์ ๋๊น์ง ์ธ๋ฑ์ค๋ฅผ ์ด๋์ํจ๋ค. (ํ ๋ฌธ์์ด) 5. c๊ฐ ๋ฑ์ฅํ ๊ฒฝ์ฐ ์ธ๋ฑ์ค๋ฅผ 1 ์ฆ๊ฐ์ํจ๋ค.
3. (๋ฌธ์์ด์ ๊ฐ์ + 1) _ sizeof(char _) ๋งํผ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๋ค. (์์ธ ์ํฉ (2) ์ฒ๋ฆฌ)
4. ๋ฌธ์์ด์ ๊ฐ์๋งํผ ๋ฌธ์์ด์ ์์ฑํ์ฌ ๋ฌธ์์ด ๋ฐฐ์ด์ ๋ฃ์ด์ค๋ค. (with `get_str`) 8. ๋ฌธ์์ด์ ์์ ํฌ์ธํฐ์ ๋ฌธ์์ด์ ๊ธธ์ด๋ฅผ ์ ๋ฌํ์ฌ ์๋ก์ด ๋ฌธ์์ด์ ์์ ํฌ์ธํฐ์ ๋ฌธ์์ด์ ๊ธธ์ด๋ฅผ ๋ฐํ๋ฐ๋๋ค. 9. ์์ธ์ํฉ (3) ์ฒ๋ฆฌ 10. ๋ฌธ์์ด์ ๋ถ์ฌ๋ฃ๋๋ค. (with `ft_strlcpy`)
5. ๋ฐฐ์ด์ ๋ง์ง๋ง์ `NULL`๋ก ๋ง๋ฌด๋ฆฌํ๋ค.
### โจ ๊ตฌํ ์ ๊ณ ๋ ค์ฌํญ
ํผ์ ๋๋ ๋น์ทํ ๋ฌธ์ ๊ฐ ์์๋๋ฐ ๊ทธ๋ ์ฝ๋๋ฅผ ํ์ฉํ๋ ํจ์ ์ค ์ ํ์ ์งํค๋ ๋ฐ์ ์ด๋ ค์์ด ์์ด์ ๋ค๋ฅธ ๋ถ์ ์ฝ๋๋ฅผ ์ฐธ๊ณ ํ๋ค. ์ด๋ค ๊ณณ์์ ํจ์๋ฅผ ์ ์ํด์ฃผ๋๋๊ฐ ๊ด๊ฑด์ธ ๊ฒ ๊ฐ๋ค.
## ๐ ft_itoa
```c
char *ft_itoa(int n);
```
**int๋ก ์ฃผ์ด์ง๋ ์ซ์๋ฅผ ๋ฌธ์์ด๋ก ๋ณํํด์ค๋ค.**
[์ฝ๋](https://github.com/yoouyeon/42Cursus/blob/main/Libft/ft_itoa.c)
### โจ ์์ธ ์ฒ๋ฆฌ
1. malloc์ด ์คํจํ ๊ฒฝ์ฐ
`NULL`์ ๋ฐํํ๋ค.
### โจ ์ฝ๋ ์งํ ๊ณผ์
1. ๋ถํธ ํ๋จํ๊ธฐ
2. ์ ๋๊ฐ ๊ณ์ฐํ๊ธฐ
3. ๋ฌธ์์ด์ ๊ธธ์ด ๊ณ์ฐํ๊ธฐ
4. ๋ค์์๋ถํฐ ์ฐจ๋ก๋ก ์ซ์ ๋ฃ์ด์ฃผ๊ธฐ (10์ผ๋ก ๋๋ ๋๋จธ์ง)
5. ์์์ผ ๊ฒฝ์ฐ ์ธ๋ฑ์ค 0 ์๋ฆฌ์ - ๋ฃ์ด์ฃผ๊ณ ์์์ผ ๊ฒฝ์ฐ์๋ ๋๋จธ์ง ์ซ์ ๋ฃ์ด์ฃผ๊ธฐ
### โจ ๊ตฌํ ์ ๊ณ ๋ ค์ฌํญ
1. intํ ๋ณ์๋ค์ ์ฒ๋ฆฌํ ๋๋ ์์ ์ต๋๊ฐ์ ์ ๋๊ฐ์ด ์์ ์ต๋๊ฐ๋ณด๋ค ํฌ๋ค๋ ์ฌ์ค์ ๊ผญ ๊ธฐ์ตํ๊ณ ์์ด์ผ ํ๋ค.
์์ ์ต๋๊ฐ์ด ์์ ์ต๋๊ฐ์ ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ ๊ฒ์ ๊ณ ๋ คํด์ ์ ๋๊ฐ์ unsigned int ํ์ผ๋ก ์ ์ฅํ๋ค.
2. ๋ฌธ์์ด์ ๊ธธ์ด๋ฅผ ์๊ฐํ ๋์ ์์๋ ์์ '-'๊ฐ ๋ค์ด๊ฐ์ผ ํ๊ธฐ ๋๋ฌธ์ ๋ฌธ์์ด์ ๊ธธ์ด๊ฐ 1๋ถํฐ ์์ํ๋ค๋ ์ ์ ๊ธฐ์ตํด๋์ด์ผ ํ๋ค.
## ๐ ft_strmapi
```c
char *ft_strmapi(char const *s, char (*f)(unsigned int, char));
```
**s ๋ฌธ์์ด์ ๊ฐ๊ฐ์ ๋ฌธ์์ ํจ์ ํฌ์ธํฐ๋ก ์ฃผ์ด์ง๋ ํจ์ f๋ฅผ ์ ์ฉํ ์๋ก์ด ๋ฌธ์์ด์ ๋ฐํํ๊ธฐ**
[์ฝ๋](https://github.com/yoouyeon/42Cursus/blob/main/Libft/ft_strmapi.c)
### โจ ์์ธ ์ฒ๋ฆฌ
1. s ๋๋ f๊ฐ `NULL`์ธ ๊ฒฝ์ฐ
๋ฌธ์์ด์ ์ฒ๋ฆฌ ํ ๋ฐฉ๋ฒ์ด ์์ผ๋ฏ๋ก `NULL`์ ๋ฐํํ๋ค.
2. malloc ์คํจํ ๊ฒฝ์ฐ
`NULL`์ ๋ฐํํ๋ค.
### โจ ์ฝ๋ ์งํ ๊ณผ์
1. ์์ธ ์ํฉ (1) ์ฒ๋ฆฌ
2. (๋ฌธ์์ด ๊ธธ์ด + 1)๋งํผ ๋ฉ๋ชจ๋ฆฌ ํ ๋น (์์ธ ์ํฉ (2) ์ฒ๋ฆฌ)
3. ๋ฌธ์์ด์ ๋ฌธ์ ๊ฐ๊ฐ์ f ์ ์ฉํด์ฃผ๊ธฐ
4. ๋ฌธ์์ด ๋์ `NULL` ์ข
๋ฃํด์ฃผ๊ธฐ
### โจ ๊ตฌํ ์ ๊ณ ๋ ค์ฌํญ
1. f์ ๋งค๊ฐ๋ณ์์ ๋ํ ์์ธํ ์ค๋ช
์ด ์์ด์ unsigned int ๋ก ๋ฐ๋ ๋งค๊ฐ๋ณ์ i๊ฐ ๋ฌด์จ ์๋ฏธ์ธ์ง ๊ถ๊ธํ๋๋ฐ ๊ฒฐ๊ตญ์๋ ๋ค๋ฅธ ๋ถ๋ค์ ์ฝ๋๋ฅผ ๋ณด๊ณ ์ธ๋ฑ์ค์ ํด๋นํ๋ ๊ฒ์ด๊ตฌ๋.. ํ๋ ๊ฒ์ ์๊ฒ ๋์๋ค.
## ๐ ft_putchar_fd
```c
void ft_putchar_fd(char c, int fd);
```
fd ๋ก ์ฃผ์ด์ง๋ ํ์ผ์ ๋ฌธ์ c ์ถ๋ ฅํ๊ธฐ
[์ฝ๋](https://github.com/yoouyeon/42Cursus/blob/main/Libft/ft_putchar_fd.c)
### โจ ์์ธ ์ฒ๋ฆฌ
1. fd๊ฐ ์์์ผ ๊ฒฝ์ฐ
์ถ๋ ฅํ์ง ์๊ณ ๋ฐํํ๋ค.
### โจ ๊ตฌํ ์ ๊ณ ๋ ค์ฌํญ
1. fd๊ฐ ์์์ผ ๊ฒฝ์ฐ๋ฅผ ๊ณ ๋ คํด ์ฃผ์ด์ผ ํ๋ค.
ํ์ผ ๋์คํฌ๋ฆฝํฐ๋ ๋ชจ๋ 0 ๋๋ ์์ ์ ์์ธ์ค ์์๋๋ฐ ํ์ผ open์ด ์ ์์ ์ผ๋ก ๋์ง ์์์ ๊ฒฝ์ฐ์๋ ํ์ผ ๋์คํฌ๋ฆฝํฐ๊ฐ ์์๋ ๋์ฌ ์ ์๋ค๊ณ ํ๋ค. fd๊ฐ ์์์ผ ๊ฒฝ์ฐ์๋ write์์ ์ค๋ฅ๊ฐ ์๊ธฐ๋ฏ๋ก (์ธ ํ์ผ์ด ์ ์์ ์ผ๋ก ์ด๋ฆฌ์ง ์์๊ธฐ ๋๋ฌธ์) ์ถ๋ ฅํ์ง ์๊ณ ๊ทธ๋๋ก ๋ฐํํด์ฃผ์ด์ผ ํ๋ค.
## ๐ ft_putstr_fd
```c
void ft_putstr_fd(char *s, int fd);
```
**fd๋ก ์ฃผ์ด์ง๋ ํ์ผ์ ๋ฌธ์์ด s ์ถ๋ ฅํ๊ธฐ**
[์ฝ๋](https://github.com/yoouyeon/42Cursus/blob/main/Libft/ft_putstr_fd.c)
### โจ ์์ธ ์ฒ๋ฆฌ
1. s๊ฐ `NULL`์ด๊ฑฐ๋ fd๊ฐ ์์์ธ ๊ฒฝ์ฐ
์ถ๋ ฅ์ด ๋ถ๊ฐ๋ฅํ๋ฏ๋ก ๊ทธ๋ฅ ๋ฐํํ๋ค.
## ๐ ft_putendl_fd
```c
void ft_putendl_fd(char *s, int fd);
```
**fd ๋ก ์ฃผ์ด์ง๋ ํ์ผ์ ๋ฌธ์์ด s ๋ฅผ ์ถ๋ ฅํ๊ณ ๊ฐํ ์ถ๋ ฅํ๊ธฐ**
[์ฝ๋](https://github.com/yoouyeon/42Cursus/blob/main/Libft/ft_putendl_fd.c)
### โจ ์์ธ ์ฒ๋ฆฌ
1. s๊ฐ `NULL`์ด๊ฑฐ๋ fd๊ฐ ์์์ธ ๊ฒฝ์ฐ
์ถ๋ ฅ์ด ๋ถ๊ฐ๋ฅํ๋ฏ๋ก ๊ทธ๋ฅ ๋ฐํํ๋ค.
## ๐ ft_putnbr_fd
```c
void ft_putnbr_fd(int n, int fd);
```
**fd๋ก ์ฃผ์ด์ง๋ ํ์ผ์ int n ์ถ๋ ฅํ๊ธฐ**
[์ฝ๋](https://github.com/yoouyeon/42Cursus/blob/main/Libft/ft_putnbr_fd.c)
### โจ ์์ธ ์ฒ๋ฆฌ
1. fd๊ฐ ์์์ผ ๊ฒฝ์ฐ
์ถ๋ ฅํ์ง ์๊ณ ๋ฐํํ๋ค.
### โจ ๊ตฌํ ์ ๊ณ ๋ ค์ฌํญ
1. itoa๋ฅผ ์ฌ์ฉํ๋ฉด ์ข ๋ ๊น๋ํ ์ฝ๋๋ฅผ ์งค ์ ์์์ ๊ฒ ๊ฐ์๋ฐ ํ์ฉ ํจ์์ free๊ฐ ์์ด์ ๋ฉ๋ชจ๋ฆฌ leak ๋ฐ์์ผ๋ก itoa๋ฅผ ์ฌ์ฉํ ์ ์์๋ค... ํํ