๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • Dev Blog
42 Seoul/Libft

[42 Seoul] Libft

by ์œ ์ง„์˜ 2021. 5. 27.
ํ”„๋กœ์ ํŠธ ๋ชฉํ‘œ: ์•ž์œผ๋กœ ์‚ฌ์šฉํ•  ์—ฌ๋Ÿฌ ์œ ์šฉํ•œ ํ•จ์ˆ˜๋“ค์„ ์ง์ ‘ ๋งŒ๋“ค๊ณ  ๊ทธ๊ฒƒ๋“ค์ด ๋“ค์–ด์žˆ๋Š” libft.a๋ผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ƒ์„ฑ
ํ”„๋กœ์ ํŠธ ์š”๊ตฌ ์‚ฌํ•ญ: Makefile์„ ์‚ฌ์šฉํ•˜๋˜ ์ตœ์†Œํ•œ all, clean, fclean, re ๊ทœ์น™์„ ํฌํ•จํ•ด์•ผ ํ•œ๋‹ค. (bonus ๊ทœ์น™๋„ ํฌํ•จ)

 

Part 1 - Libc Functions

Libc(C ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ) ํ•จ์ˆ˜๋“ค์„ ์›๋ณธ๊ณผ ๊ฐ™์€ ํ˜•์‹์˜ ํ”„๋กœํ† ํƒ€์ž…์œผ๋กœ ์„ ์–ธํ•˜์—ฌ ์žฌ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค. ์ด๋•Œ, ํ•จ์ˆ˜์˜ ์ด๋ฆ„ ์•ž์—๋Š” "ft_"๋ฅผ ๋ถ™์—ฌ์•ผ ํ•œ๋‹ค.

 

์žฌ๊ตฌํ˜„ํ•  Libc ํ•จ์ˆ˜ ๋ฆฌ์ŠคํŠธ

๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ จ ํ•จ์ˆ˜:  memset, bzero, memcpy, memccpy, memmove, memchr, memcmp, calloc
๋ฌธ์ž์—ด ๊ด€๋ จ ํ•จ์ˆ˜: strlen, strlcpy, strlcat, strchr, strrchr, strnstr, strncmp, atoi, strdup
๋ฌธ์ž ๊ด€๋ จ ํ•จ์ˆ˜: isalpha, isdigit, isalnum, isascii, isprint, toupper, tolower

โ€ป์ด๋ฒˆ ๊ณผ์ œ๋ฅผ ํ•˜๋ฉด์„œ ์ƒˆ๋กœ ์•Œ๊ฒŒ ๋œ ๋ถ€๋ถ„๋งŒ ์ •๋ฆฌํ•˜๋ ค๊ณ  ํ•œ๋‹คโ€ป

 

1. ft_memset

void  *ft_memset(void *b, int c, size_t len)

- memset์€ ๋ฉ”๋ชจ๋ฆฌ์˜ ๋‚ด์šฉ์„ ์›ํ•˜๋Š” ํฌ๊ธฐ๋งŒํผ ํŠน์ •๊ฐ’์œผ๋กœ ์„ค์ •ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค.

- void ํฌ์ธํ„ฐํ˜•์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ๋‹ค์–‘ํ•œ ์ž๋ฃŒํ˜•์˜ ํฌ์ธํ„ฐ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.

- ์ž„์˜์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ 1๋ฐ”์ดํŠธ๋กœ ์ชผ๊ฐœ์„œ ๋‹ค๋ฃฐ ๋•Œ์—๋Š” char๋ณด๋‹ค ๋ชจ๋“  ๋น„ํŠธ๊ฐ€ value bit์ธ unsigned char๋กœ ํ˜• ๋ณ€ํ™˜ํ•˜์—ฌ ๋‹ค๋ฃจ๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

- size_t๋ž€?

 

 

2. ft_bzero

void  ft_bzero(void *s, size_t n)

- bzero๋Š” ๋ฉ”๋ชจ๋ฆฌ์˜ ๋‚ด์šฉ์„ ๋ชจ๋‘ 0์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค.

 

 

3. ft_memcpy

void  *ft_memcpy(void *dst, const void *src, size_t n)

- memcpy๋Š” src ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์˜ ๋ฐ์ดํ„ฐ๋ฅผ dst ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์œผ๋กœ n ๋ฐ”์ดํŠธ๋งŒํผ ๋ณต์‚ฌํ•˜๊ณ  dst๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค.

- dst์™€ src์˜ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์ด ๊ฒน์น  ์ˆ˜ ์žˆ๋Š”๋ฐ memcpy๋Š” ์ฒ˜๋ฆฌ๋ฅผ ๋”ฐ๋กœ ํ•ด์ฃผ์ง€๋Š” ์•Š๋Š”๋‹ค.

 

 

4. ft_memccpy

void  *ft_memccpy(void *dst, const void *src, int c, size_t n)

- memccpy๋Š” src ๋ฐ์ดํ„ฐ๋ฅผ dst์— ๋ณต์‚ฌํ•  ๋•Œ src ๋ฐ์ดํ„ฐ์˜ ํŠน์ • ๋ฌธ์ž c๊นŒ์ง€ ๋ณต์‚ฌํ•˜๋Š”๋ฐ ์ด๋•Œ, c๋ฅผ ๋งŒ๋‚˜์„œ ๋ณต์‚ฌ๊ฐ€ ์ค‘๋‹จ๋˜์—ˆ์œผ๋ฉด dst์˜ ๋‹ค์Œ ์ฃผ์†Œ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๊ณ  ์ค‘๋‹จ์ด ๋˜์ง€ ์•Š์•˜๋‹ค๋ฉด NULL์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค.

 

 

5. ft_memmove

void  *ft_memmove(void *dst, const void *src, size_t len)

- memmove๋Š” memcpy์™€ ๋™์ผํ•œ ๊ธฐ๋Šฅ์„ ํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค. ํ•˜์ง€๋งŒ memcpy๋Š” dst์™€ src๊ฐ€ ๊ฒน์น˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์ฒ˜๋ฆฌ๋ฅผ ๋”ฐ๋กœ ์•ˆ ํ•ด์ฃผ๋Š” ๋ฐ˜๋ฉด, memmove๋Š” ๋‘ ์˜์—ญ์ด ๊ฒน์น˜๋Š” ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๊ฐ€ ์ด๋ฃจ์–ด์ง„๋‹ค.

- src์™€ dst์ด ์„œ๋กœ ๊ฒน์น˜์ง€ ์•Š๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ๋ถ€ํ„ฐ ๋จผ์ € ๋ณต์‚ฌํ•˜๋Š”๋ฐ ์‰ฝ๊ฒŒ ๋งํ•ด์„œ dst๊ฐ€ src๋ณด๋‹ค ์ž‘์„ ๋•Œ๋Š” ์•ž์—์„œ๋ถ€ํ„ฐ ๋ณต์‚ฌํ•˜์ง€๋งŒ ํด๋•Œ๋Š” ๋’ค์—์„œ๋ถ€ํ„ฐ ๋ณต์‚ฌํ•œ๋‹ค.

 

 

6. ft_memchr

void *ft_memchr(const void *s, int c, size_t n)

- memchr์€ s ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์—์„œ ํŠน์ • ๋ฌธ์ž c๊ฐ€ ์กด์žฌํ•˜๋ฉด ๊ทธ ๋ถ€๋ถ„์ฃผ์†Œ ๊ฐ’์„๋ฐ˜ํ™˜์„ ํ•˜๊ณ  ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด NULL์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค.

 

 

7. ft_strchr๊ณผ ft_strrchr

char  *strchr(const char *s, int c)
char  *strrchr(const char *s, int c)

- strchr์€ ๋ฌธ์ž์—ด s์—์„œ ๊ฐ€์žฅ ๋จผ์ € ์œ„์น˜ํ•œ ํŠน์ • ๋ฌธ์ž c์˜ ์ฃผ์†Œ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค.

- strrchr์€ ๋ฌธ์ž์—ด s์—์„œ ๊ฐ€์žฅ ๋‚˜์ค‘์— ์œ„์น˜ํ•œ ํŠน์ • ๋ฌธ์ž c์˜ ์ฃผ์†Œ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค.

 

 

8. ft_calloc

void  *calloc(size_t count, size_t size)

- size ํฌ๊ธฐ์˜ ๋ณ€์ˆ˜๋ฅผ count๊ฐœ๋งŒํผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„ ํ• ๋‹นํ•˜๋Š” ์—ญํ• ์„ ํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค.

- ์ด๋•Œ ํ• ๋‹น๋œ ๊ณต๊ฐ„์˜ ๊ฐ’์€ ๋ชจ๋‘ 0์œผ๋กœ ์ดˆ๊ธฐํ™”๋˜์–ด์žˆ๋‹ค.

 

 

 

Part 2 - Additional Functions

Libc์— ํฌํ•จ๋ผ์žˆ์ง€ ์•Š๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ํ”„๋กœํ† ํƒ€์ž… ์„ ์–ธ ํ˜•์‹์œผ๋กœ ํฌํ•จ๋œ ํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค. 

 

Part 1์˜ Libc ํ•จ์ˆ˜๋“ค์€ man์— ๋„ ๊ฐ€๋“œ์— ๋Œ€ํ•œ ๋ถ€๋ถ„์ด ์–ธ๊ธ‰์ด ์—†์–ด ๋„ ๊ฐ€๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์•˜์ง€๋งŒ, Part 2๋Š” ๋”ฐ๋กœ ๋”ฐ๋ผ์•ผ ํ•  ๋ ˆํผ๋Ÿฐ์Šค๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋„ ๊ฐ€๋“œ๋ฅผ ๋ชจ๋“  ํ•จ์ˆ˜์— ์ ์šฉ์‹œ์ผฐ๋‹ค. ๋˜ํ•œ malloc ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๋™์  ํ• ๋‹น์— ์‹คํŒจํ•  ๊ฒฝ์šฐ๋ฅผ ์ฒ˜๋ฆฌํ•ด์คฌ๊ณ  ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋ฅผ ๋ง‰๊ธฐ ์œ„ํ•ด free ํ•จ์ˆ˜๋„ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์‚ฌ์šฉํ•˜์˜€๋‹ค.

 

โ€ป ๋„ ๊ฐ€๋“œ(Null guard)๋ž€?

ํ•จ์ˆ˜์˜ ์ธ์ž๋กœ (void *) 0, ์ฆ‰ ๋นˆ ์ฃผ์†Œ ๊ฐ’์ด ๋“ค์–ด์˜ฌ ๋•Œ ์ด๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ธฐ๋ฒ•์ด๋‹ค. 

 

1. ft_substr

char  *ft_substr(char const *s, unsigned int start, size_t len)

 ํ•จ์ˆ˜ ์„ค๋ช…:  ๋ฌธ์ž์—ด s์—์„œ ํ•˜์œ„ ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค. ๋ฐ˜ํ™˜ํ•  ํ•˜์œ„ ๋ฌธ์ž์—ด์˜ ์ตœ๋Œ€ ๊ธธ์ด๋Š” len์ด๊ณ  ๋ฌธ์ž์—ด s์˜ start ์ธ๋ฑ์Šค๋ถ€ํ„ฐ ์‹œ์ž‘๋œ๋‹ค.

 

2. ft_strjoin

char  *ft_strjoin(char const *s1, char const *s2)

ํ•จ์ˆ˜ ์„ค๋ช…: ๋ฌธ์ž์—ด s1๊ณผ ๋ฌธ์ž์—ด s2๊ฐ€ ํ•ฉ์ณ์ง„ ์ƒˆ๋กœ์šด ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค.

 

3. ft_strtrim

char  *ft_strtrim(char const *s1, char const *set)

ํ•จ์ˆ˜ ์„ค๋ช…: ๋ฌธ์ž์—ด s1์˜ ์ฒ˜์Œ๊ณผ ๋์—์„œ set์— ์ง€์ •๋œ ๋ฌธ์ž๋“ค์ด ์กด์žฌํ•œ๋‹ค๋ฉด ๊ทธ๊ฒƒ๋“ค์ด ์ œ๊ฑฐ๋œ ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค. 

- Part 1์—์„œ ๊ตฌํ˜„ํ–ˆ๋˜ ft_strchr ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ตฌํ˜„ํ•˜๋Š”๋ฐ ์šฉ์ดํ•˜๊ฒŒ ํ•˜์˜€๋‹ค.

 

4. ft_split

char  **ft_split(char const *s, char c)

ํ•จ์ˆ˜ ์„ค๋ช…: ๊ตฌ๋ถ„์ž c๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ž์—ด s์„ ๋ถ„ํ• ํ•˜์—ฌ ์–ป์€ ์ƒˆ๋กœ์šด ๋ฌธ์ž์—ด ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค. ์ด๋•Œ ๋ฐฐ์—ด์€ NULL๋กœ ๋๋‚˜์•ผ ํ•œ๋‹ค.

 

5. ft_itoa

char  *ft_itoa(int n)

ํ•จ์ˆ˜ ์„ค๋ช…: atoi์™€ ๋ฐ˜๋Œ€๋กœ ์ •์ˆ˜ n์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค. ์ด๋•Œ ์Œ์ˆ˜ ์ฒ˜๋ฆฌ๋„ ํ•ด์ค˜์•ผ ํ•œ๋‹ค.

 

6. ft_strmapi

char  *ft_strmapi(char const *s, char (*f)(unsigned int, char))

ํ•จ์ˆ˜ ์„ค๋ช…: ๋ฌธ์ž์—ด s์˜ ๊ฐ ๋ฌธ์ž์— fํ•จ์ˆ˜๋ฅผ ์—ฐ์†์ ์œผ๋กœ ์ ์šฉ์‹œํ‚จ ์ƒˆ๋กœ์šด ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค.

 

7. ft_putchar_fd

void  ft_putchar_fd(char c, int fd)

ํ•จ์ˆ˜ ์„ค๋ช…: ๋ฌธ์ž c๋ฅผ ์ฃผ์–ด์ง„ ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ๋กœ ์ถœ๋ ฅํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค.

์š”๊ตฌ ์‚ฌํ•ญ:  unistd ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ write ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

 

8. ft_putstr_fd

void  ft_putstr_fd(char *s, int fd)

ํ•จ์ˆ˜ ์„ค๋ช…: ๋ฌธ์ž์—ด s๋ฅผ ์ฃผ์–ด์ง„ ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ๋กœ ์ถœ๋ ฅํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค.

์š”๊ตฌ ์‚ฌํ•ญ:  unistd ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ write ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

 

9. ft_putendl_fd

void  ft_putendl_fd(char *s, int fd)

ํ•จ์ˆ˜ ์„ค๋ช…: ๋ฌธ์ž์—ด s๋ฅผ ์ฃผ์–ด์ง„ ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ๋กœ ์ถœ๋ ฅํ•˜๊ณ  ๊ฐœํ–‰๊นŒ์ง€ ํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค.

์š”๊ตฌ ์‚ฌํ•ญ:  unistd ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ write ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

 

10. ft_putnbr_fd

void  ft_putnbr_fd(int n, int fd)

ํ•จ์ˆ˜ ์„ค๋ช…: ์ •์ˆ˜ >n์„ ์ฃผ์–ด์ง„ ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ๋กœ ์ถœ๋ ฅํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค.

์š”๊ตฌ ์‚ฌํ•ญ:  unistd ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ write ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

 

 

 

Bonus Part

typedef struct             s_list
{
              void                *content;
              struct  s_list   *next;
}                                     t_list;

์œ„์™€ ๊ฐ™์ด ์„ ์–ธ๋œ ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ์˜ ๋…ธ๋“œ ๊ตฌ์กฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋‹ค๋ฃจ๋Š” ํ•จ์ˆ˜๋“ค์„ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค.

 

1. ft_lstnew

t_list  *ft_lstnew(void *content)

ํ•จ์ˆ˜ ์„ค๋ช…: ๋งค๊ฐœ๋ณ€์ˆ˜ content์˜ ๊ฐ’์„ content์œผ๋กœ ๊ฐ€์ง€๊ณ  next๋Š” NULL๋กœ ์ดˆ๊ธฐํ™”๋˜๋Š” ์ƒˆ๋กœ์šด ์š”์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค.

์š”๊ตฌ ์‚ฌํ•ญ: malloc ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

 

2. ft_lstadd_front

void  ft_lstadd_front(t_list **lst, t_list *new)

ํ•จ์ˆ˜ ์„ค๋ช…: ๋งค๊ฐœ๋ณ€์ˆ˜ lst๋Š” ์ฒซ ๋ฒˆ์งธ ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ์˜ ํฌ์ธํ„ฐ ์ฃผ์†Œ์ด๊ณ  new๋Š” ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€๋˜๊ธฐ ์œ„ํ•œ ์š”์†Œ์˜ ํฌ์ธํ„ฐ ์ฃผ์†Œ์ด๋‹ค.

๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ์˜ ์‹œ์ž‘ ๋ถ€๋ถ„์— ์š”์†Œ new๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค.

 

3. ft_lstsize

int  ft_lstsize(t_list *lst)

ํ•จ์ˆ˜ ์„ค๋ช…: lst๋Š” ๋ฆฌ์ŠคํŠธ์˜ ์‹œ์ž‘ ์ฃผ์†Œ์ด๋‹ค. ํ˜„์žฌ ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ์˜ ๊ธธ์ด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค.

 

4. ft_lstlast

t_list  *ft_lstlast(t_list *lst)

ํ•จ์ˆ˜ ์„ค๋ช…: lst๋Š” ๋ฆฌ์ŠคํŠธ์˜ ์‹œ์ž‘ ์ฃผ์†Œ์ด๋‹ค. ํ˜„์žฌ ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ์˜ ๋งˆ์ง€๋ง‰ ์š”์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค.

 

5. ft_lstadd_back

void  ft_lstadd_back(t_list **lst, t_list *new)

ํ•จ์ˆ˜ ์„ค๋ช…: ๋งค๊ฐœ๋ณ€์ˆ˜ lst๋Š” ์ฒซ ๋ฒˆ์งธ ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ์˜ ํฌ์ธํ„ฐ ์ฃผ์†Œ์ด๊ณ  new๋Š” ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€ ๋˜๊ธฐ ์œ„ํ•œ ์š”์†Œ์˜ ํฌ์ธํ„ฐ ์ฃผ์†Œ์ด๋‹ค.

๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ์˜ ๋งˆ์ง€๋ง‰ ๋ถ€๋ถ„์— new๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค.

 

6. ft_lstdelone

void  ft_lstdelone(t_list *lst, void (*del)(void *))

ํ•จ์ˆ˜ ์„ค๋ช…: lst๋Š” free๋ฅผ ํ•ด์ค„ ์š”์†Œ์˜ ์ฃผ์†Œ์ด๊ณ  del์€ ์š”์†Œ์˜ content๋ฅผ ์‚ญ์ œํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ํ•จ์ˆ˜์˜ ์ฃผ์†Œ์ด๋‹ค. ํ•ด๋‹น ์š”์†Œ์˜ content๋ฅผ ์‚ญ์ œํ•˜๋Š” del ํ•จ์ˆ˜๋ฅผ ์ ์šฉํ•˜๊ณ  ํ•ด๋‹น ์š”์†Œ๋ฅผ  freeํ•ด์ฃผ๋Š” ํ•จ์ˆ˜์ด๋‹ค.

์š”๊ตฌ ์‚ฌํ•ญ: free ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

 

7. ft_lstclear

void  ft_lstclear(t_list **lst, void (*del)(void *))

ํ•จ์ˆ˜ ์„ค๋ช…: ๋งค๊ฐœ๋ณ€์ˆ˜ lst๋Š” ์š”์†Œ์˜ ํฌ์ธํ„ฐ ์ฃผ์†Œ์ด๊ณ  del์€ ์†Œ์˜ content๋ฅผ ์‚ญ์ œํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ํ•จ์ˆ˜์˜ ์ฃผ์†Œ์ด๋‹ค. ํ•ด๋‹น ์š”์†Œ์˜ content๋ฅผ ์‚ญ์ œํ•˜๋Š” del ํ•จ์ˆ˜๋ฅผ ์ ์šฉํ•˜๊ณ  ํ•ด๋‹น ์š”์†Œ๋ฅผ  freeํ•ด์ฃผ๊ณ  ์ด ์ž‘์—…์„ ๋ชจ๋“  ํ›„์† ์š”์†Œ์—๋„ ์ ์šฉ์‹œํ‚ค๋Š” ํ•จ์ˆ˜์ด๋‹ค.

์š”๊ตฌ ์‚ฌํ•ญ: free ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

8. ft_lstiter

void  ft_lstiter(t_list *lst, void (*f)(void *))

ํ•จ์ˆ˜ ์„ค๋ช…: ๋งค๊ฐœ๋ณ€์ˆ˜ lst๋Š” ์š”์†Œ์˜ ํฌ์ธํ„ฐ ์ฃผ์†Œ์ด๊ณ  f๋Š” ๋ฆฌ์ŠคํŠธ์— ๋ฐ˜๋ณต์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ํ•จ์ˆ˜์˜ ์ฃผ์†Œ์ด๋‹ค. ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ฐ˜๋ณตํ•˜์—ฌ ๊ฐ ์š”์†Œ์˜ content์— ํ•จ์ˆ˜ f๋ฅผ ์ ์šฉ์‹œํ‚ค๋Š” ํ•จ์ˆ˜์ด๋‹ค.

 

9. ft_lstmap

t_list  *ft_lstmap(t_list *lst, void *(*f)(void *), void (*del)(void *))

ํ•จ์ˆ˜ ์„ค๋ช…: ๋งค๊ฐœ๋ณ€์ˆ˜ lst๋Š” ์š”์†Œ์˜ ํฌ์ธํ„ฐ ์ฃผ์†Œ, f๋Š” ๋ฆฌ์ŠคํŠธ์— ๋ฐ˜๋ณต์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ํ•จ์ˆ˜์˜ ์ฃผ์†Œ์ด๊ณ  del์€ ์š”์†Œ์˜ content๋ฅผ ์‚ญ์ œํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋˜๋Š” ํ•จ์ˆ˜์˜ ์ฃผ์†Œ์ด๋‹ค. ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ฐ˜๋ณตํ•˜์—ฌ ๊ฐ ์š”์†Œ์˜ content์— ํ•จ์ˆ˜ f๋ฅผ ์—ฐ์†์ ์œผ๋กœ ์ ์šฉ์‹œ์ผœ ์ƒˆ๋กœ์šด ๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“œ๋Š” ํ•จ์ˆ˜์ด๋‹ค. ์ด๋•Œ ๋™์  ํ• ๋‹น์— ์‹คํŒจํ–ˆ์„ ๊ฒฝ์šฐ์— del ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด ๋ชจ๋“  ์š”์†Œ๋ฅผ ์‚ญ์ œํ•ด์•ผ ํ•œ๋‹ค.

์š”๊ตฌ ์‚ฌํ•ญ: malloc๊ณผ free ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.  

๋Œ“๊ธ€