> [!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๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์—ˆ๋‹ค... ํ•˜ํ•˜