libft
๐Ÿ™ˆ

libft

Created
Feb 7, 2023 08:29 AM
Last edited time
Last updated January 23, 2024
Tags
42
Language
C
URL

Part1

ubuntu์—์„œ leak๋ฅผ ์ฒดํฌํ• ๋•Œ valgrind๋กœ ํ™•์ธํ•˜๋ฉด ๋œ๋‹ค.
size_t ?
์ด๋ก ์ƒ ๊ฐ€์žฅ ํฐ ์‚ฌ์ด์ฆˆ๋ฅผ ๋‹ด์„ ์ˆ˜ ์žˆ๋Š” โ€˜unsignedโ€™ ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด๋‹ค. ์šด์˜์ฒด์ œ์—์„œ ๊ณ ์ •๋œ ์‚ฌ์ด์ฆˆ๋ฅผ ๊ฐ€์ง„๋‹ค. ex) 32๋น„ํŠธ ์šด์˜์ฒด์ œ์—์„œ๋Š” unsigned int, 64๋น„ํŠธ ์šด์˜์ฒด์ œ์—์„œ๋Š” unsigned long long์œผ๋กœ ๊ณ ์ •๋œ ์‚ฌ์ด์ฆˆ๋ฅผ ๊ฐ€์ง„๋‹ค.
int ์™€ ๋‹ค๋ฅธ์  : int๋Š” ์šด์˜์ฒด์ œ์— ๋”ฐ๋ผ ํ‘œํ˜„ํ• ์ˆ˜ ์žˆ๋Š” ์ •์ˆ˜ํ˜•์ด ๋ฐ”๋€”์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด๋‹ค.
const char ?
const ๋ž€ ์ƒ์ˆ˜ํ™” ์‹œํ‚จ๋‹ค๋Š” ๋œป์˜ ํ‚ค์›Œ๋“œ๋กœ ์ฒ˜์Œ ์ •ํ•ด์ง„ ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค.
memset
memset์€ 1๋ฐ”์ดํŠธ ๋‹จ์œ„๋กœ ๊ฐ’์„ ์ดˆ๊ธฐํ™” ํ•˜๊ธฐ ๋•Œ๋ฌธ์— 0์ด ์•„๋‹Œ int ํƒ€์ž…์˜ ์ˆซ์ž๋ฅผ ๋„ฃ๊ฒŒ ๋˜๋ฉด ์˜ˆ์ƒํ•  ์ˆ˜ ์—†๋Š” ๊ฐ’์œผ๋กœ ์„ธํŒ…๋œ๋‹ค.
๊ฒฐ๊ณผ์ ์œผ๋กœ 0์ด ์•„๋‹Œ ๊ทธ๋ฆฌ๊ณ  char ํƒ€์ž…์ด ์•„๋‹Œ ๊ฐ’์„ ๋„ฃ์–ด์„œ ์„ธํŒ…ํ•˜๋ ค๊ณ  ํ• ๋•Œ๋Š” ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ๊ฐ’์œผ๋กœ ์„ธํŒ…ํ•  ์ˆ˜ ์—†๋‹ค. ์ฆ‰, 0์ด๋ž‘ char ํƒ€์ž…๋งŒ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
ex)
#include <iostream> #include <memory.h> using namespace std; int main() { int arr[10]; memset(arr, 1, sizeof(arr)); for (int i = 0; i < 10; i++) cout << arr[i]<<endl; }
1๋ฐ”์ดํŠธ ๋‹จ์œ„๋กœ ์ดˆ๊ธฐํ™” ํ•˜๊ธฐ ๋•Œ๋ฌธ์— 00000001000000010000000100000001๋กœ ๋ณ€ํ™˜ ๋œ๋‹ค.
โ‡’ 16843009
ย 
bzero
void bzero(void *s, size_t n);
memset ์ด๋ž‘ ์œ ์‚ฌํ•˜์ง€๋งŒ ์ฃผ์–ด์ง„ n๋งŒํผ 0์œผ๋กœ ์ดˆ๊ธฐํ™” ํ•œ๋‹ค๋Š” ์ ์ด ๋‹ค๋ฅด๋‹ค.
ย 
ย 
restrict
ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์ปดํŒŒ์ผ๋Ÿฌ์—๊ฒŒ restrict ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ์— ๋Œ€ํ•œ ์ตœ์ ํ™”๋ฅผ ํ•ด๋‹ฌ๋ผ๊ณ  ์•Œ๋ ค์ฃผ๋Š” ์—ญํ• ์„ ๋‹ด๋‹นํ•œ๋‹ค๊ณ  ํ•œ๋‹ค. ๋˜ํ•œ ํŠน์ • ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์— ์ ‘๊ทผ ํ•  ์ˆ˜ ์žˆ๋Š” ํฌ์ธํ„ฐ๊ฐ€ ๋‹จ ํ•˜๋‚˜์ž„์„ ๋ณด์žฅํ•˜๋Š” ํ‚ค์›Œ๋“œ์ด๋‹ค.
memcpy && memmove
void *ft_memcpy(void *restrict dst, const void *restrict src, size_t n);
src๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฉ”๋ชจ๋ฆฌ์˜ ๊ฐ’์„ n ๊ธธ์ด๋งŒํผ dst๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ๋ณต์‚ฌํ•ด ๋ถ™์—ฌ๋„ฃ๋Š” ํ•จ์ˆ˜์ด๋‹ค.
์‚ฌ์šฉ์‹œ ์ฃผ์˜ํ•  ์ ์€ char *ํƒ€์ž…์˜ c์–ธ์–ด ๋ฌธ์ž์—ด ํ˜•ํƒœ์˜ ๋ฌธ์ž์—ด์˜ ์ „์ฒด๋ฅผ ๋ณต์‚ฌํ• ๋•Œ๋Š” ๋งจ๋’ค์— ๋ฌธ์ž์—ด์˜ ๋์„ ์•Œ๋ฆฌ๋Š” โ€œ\0โ€์˜ ๊ธธ์ด๋„ ๊ณ„์‚ฐํ•ด ๋„ฃ์–ด์•ผ ํ•˜๊ธฐ๋•Œ๋ฌธ์— ๊ธธ์ด +1 ๋งŒํผ ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค. ๋˜ํ•œ src ์™€dst์˜ ๋ฉ”๋ชจ๋ฆฌ ๋ธ”๋ก์ด ๊ฒน์ณ์ ธ ์žˆ๋Š” ๊ณณ์—์„œ๋Š” ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•œ๋‹ค๊ณ  ํ•œ๋‹ค. ์ด๋–„ ๋งŒ์•ฝ ๋™์ผํ•œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์— ๋ฎ์–ด์”Œ์›Œ์•ผ ํ•œ๋‹ค๋ฉด memmoveํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด๋œ๋‹ค.( but, ์š”์ฆ˜์—” memcpy,memmove ๋‘˜๋‹ค ๋™์ผํ•˜๊ฒŒ ์ž‘๋™ํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.)
memmove๋Š” memcpy์™€ ์œ ์‚ฌํ•˜์ง€๋งŒ ๋ฒ„ํผ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ณต์‚ฌํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. memcpy๋ณด๋‹ค ๋” ์•ˆ์ •์„ฑ์ด ๋†’๋‹ค.
strlcpy && strlcat
size_t ft_strlcpy(char *dst, const char *src, size_t dstsize); size_t ft_strlcat(char *dst, const char *src, size_t dstsize);
strlcpy ์˜ ๊ฒฝ์šฐ src์—์„œ dstsize - 1(nul๊ฐ’) ๋งŒํผ์„ ๋ณต์‚ฌํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค.
strlcat ์˜ ๊ฒฝ์šฐ์—๋Š” dst์˜ ๋’ท๋ถ€๋ถ„๋ถ€ํ„ฐ src ์˜ dstsize๋งŒํผ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์˜ฎ๊ฒจ ๋ถ™์ด๋Š” ๊ฒƒ์ธ๋ฐ, ํŠน์ดํ•˜๊ฒŒ ์ž˜๋ฆผ์„ ๋ฐฉ์ง€ํ•˜๋Š” ๊ตฌ์กฐ์—ฌ์„œ dstsize ๊ฐ€ dst์˜ ๊ธธ์ด+ nul๊ฐ’๋ณด๋‹ค ์งง๋‹ค๋ฉด ( dstsize < dst_len + 1(nul๊ฐ’)) dstsize + src_len์„ ๋ฐ˜ํ™˜๋งŒ ํ•˜๊ณ , ์ด์™ธ์˜ ๊ฒฝ์šฐ์—๋Š” dst์˜ ๋’ท๋ถ€๋ถ„์— ํ•ด๋‹น ๊ฐ’๋งŒํผ ์˜ฎ๊ฒจ ๋ถ™์ด๋ฉฐ ๋ฐ˜ํ™˜์€ dst_len + src_len ์„ ํ•œ๋‹ค.
ย 
ft_strchr && ft_strrchr
char *ft_strchr(const char *s, int c); char *ft_strrchr(const char *s, int c);
ft_strchr์€ s ์—์„œ c๊ฐ€ ์žˆ๋Š”๋ถ€๋ถ„ ๋ถ€ํ„ฐ์˜ ์ฃผ์†Œ๋ฅผ ๋ฆฌํ„ดํ•ด์ค€๋‹ค. ๋งŒ์ผ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด NULL์„ ๋ฆฌํ„ดํ•œ๋‹ค.
ft_strrchr์€ ft_strrchr๊ณผ ๋˜‘๊ฐ™์ง€๋งŒ ๋’ค์—์„œ ๋ถ€ํ„ฐ ์„ผ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. ๋„๋ฌธ์ž์—ด์ด ๋“ค์–ด์˜ฌ๋•Œ๋ฅผ ์œ ์˜ํ•˜์ž.
ย 
memchr
void *ft_memchr(const void *b, int c, size_t n);
ํฌ์ธํ„ฐ b์—์„œ n๋ฐ”์ดํŠธ ๋งŒํผ๊นŒ์ง€์—์„œ c๊ฐ€ ์กด์žฌํ•˜๋Š” ์ง€๋ฅผ ํ™•์ธํ•˜์—ฌ void *๋กœ ๋ฐ˜ํ™˜ํ•ด ์ค€๋‹ค.
ย 
memcmp
int ft_memcmp(const void *b1, const void *b2, size_t n)
์–ผํ• ์ƒ๊ฐํ•ด๋ณด๋ฉด strcmp ์™€ ๋ฌด์Šจ์ฐจ์ด์ธ๊ฐ€ ํ•˜๊ฒ ์ง€๋งŒ strcmp๋Š” โ€˜\0โ€™๋’ค๋กœ ๋‹ค๋ฅธ ๋ฌธ์ž์—ด์ด์–ด๋„ ๋™์ผํ•˜๋‹ค ํŒ๋‹จํ•˜์ง€๋งŒ memcmp์€ ์•„๋‹ˆ๋‹ค
strnstr
char *ft_strnstr(const char *haystack, const char *needle, size_t len);
haystack์—์„œ len ๋ฐ”์ดํŠธ ๋งŒํผ์˜ ๊ตฌ๊ฐ„์—์„œ needle์ด ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์กด์žฌํ•˜๋ฉด ๊ทธ๋•Œ์˜ ์ฃผ์†Œ๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค. needle์ด ๋นˆ ๋ฌธ์ž์—ด์ด๋ผ๋ฉด haystack์„ ๊ทธ๋Œ€๋กœ ๋ฐ˜ํ™˜ํ•˜๊ณ  ๊ทธ์™ธ์— ๊ฐ’์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด NULL์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
atoi
int ft_atoi(const char *str)
๋จผ์ € ํ•˜์ดํŠธ์ŠคํŽ˜์ด์Šค๋ฅผ ๋ฐ€๊ณ  ๋ถ€ํ˜ธ๋ฅผ ํ™•์ธํ•œ๋‹ค์Œ ( ๋ถ€ํ˜ธ๋Š” ํ•˜๋‚˜๋งŒ ํ™•์ธํ•œ๋‹ค, ์—ฌ๋Ÿฌ๊ฐœ ์žˆ์œผ๋ฉด 0๋ฆฌํ„ด) ๊ทธ์ดํ›„ ๋ณ€ํ•œ์„ ํ•ด์ค€๋‹ค.
C์–ธ์–ด์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ
์ฝ”๋“œ
์‹คํ–‰ํ•  ํ”„๋กœ๊ทธํ–„์˜ ์ฝ”๋“œ๊ฐ€ ์ €์žฅ๋˜๋Š” ์˜์—ญ์œผ๋กœ ํ…์ŠคํŠธ ์˜์—ญ์ด๋ผ๊ณ ๋„ ๋ถˆ๋ฆฐ๋‹ค.
๋ฐ์ดํ„ฐ
์ „์—ญ ๋ณ€์ˆ˜์™€ static(์ •์ ) ๋ณ€์ˆ˜๊ฐ€ ํ• ๋‹น๋˜๋Š” ์˜์—ญ
ํ”„๋กœ๊ทธ๋žจ์˜ ์‹œ์ž‘๊ณผ ๋™์‹œ์— ํ• ๋‹น๋˜๊ณ , ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๋˜์–ด์•ผ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์†Œ๋ฉธ๋จ
ํž™
ํ•„์š”์— ์˜ํ•ด ๋™์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹น ํ•  ๋•Œ ์‚ฌ์šฉ
์ฆ‰ ํ• ๋‹นํ•ด์•ผ ํ•  ๋ฉ”๋ชจ๋ฆฌ์˜ ํฌ๊ธฐ๋ฅผ ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๋Š” ๋™์•ˆ ๊ฒฐ์ •ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ(๋Ÿฐ ํƒ€์ž„๋•Œ) ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ๋˜๋Š” ๊ณต๊ฐ„
์Šคํƒ
ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ ์ƒ์„ฑ๋˜๋Š” ์ง€์—ญ ๋ณ€์ˆ˜์™€ ๋งค๊ฐœ ๋ณ€์ˆ˜๊ฐ€ ์ €์žฅ๋˜๋Š” ์˜์—ญ
ํ•จ์ˆ˜ ํ˜ธ์ถœ์ด ์™„๋ฃŒ๋˜๋ฉด ์‚ฌ๋ผ์ง
calloc
void *calloc(size_t nmemb, size_t size);
malloc๊ณผ ์œ ์‚ฌํ•˜์ง€๋งŒ ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ 2๊ฐœ์ด๋‹ค. nmemb์˜ ๊ฒฝ์šฐ ํ• ๋‹นํ•  ๋ฉ”๋ชจ๋ฆฌ์˜ ๋‹จ์œ„ ๊ฐฏ์ˆ˜์ด๊ณ , size์˜ ๊ฒฝ์šฐ ํ•˜๋‚˜๋‹น์˜ ํฌ๊ธฐ๋ฅผ ์ด์•ผ๊ธฐํ•œ๋‹ค. ๋˜ ๋‹ค๋ฅธ ์ฐจ์ด์ ์€ malloc์€ ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์— ์ดˆ๊ธฐํ™” ํ•˜์ง€์•Š์€ ์“ฐ๋ ˆ๊ธฐ๊ฐ’์ด ๋“ค์–ด์žˆ์ง€๋งŒ calloc์€ ๋ชจ๋‘ 0์œผ๋กœ ์ดˆ๊ธฐํ™” ์‹œ์ผœ์ค€๋‹ค.
strdup
char *ft_strdup(const char *str)
malloc์„ ํ•ด์„œ str์„ ๋ณต์‚ฌํ•ด ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹นํ•˜๋Š” ํ•จ์ˆ˜๋กœ malloc + strlcpy ๋ผ ์ƒ๊ฐํ•˜๋ฉด ์‰ฝ๋‹ค.
ย 

Part2

ย 
malloc ํ›„ free๋ฅผ ์œ ์˜ ํ•˜์—ฌ์•ผ ํ•œ๋‹ค. ํ•จ์ˆ˜์—์„œ ์‚ฌ์šฉํ›„ ๋”์ด์ƒ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฉ”๋ชจ๋ฆฌ์˜ ๊ฒฝ์šฐ์— ํ•œํ•˜์—ฌ free๋ฅผ ํ•ด ์ฃผ์–ด์•ผ ํ•œ๋‹ค.
๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ํ™•์ธ ๋ฐฉ๋ฒ•
void leaks() { system("leaks ft_split"); } int main() { atexit(leaks); }
static ํ•จ์ˆ˜
static ๋ณ€์ˆ˜๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ์‹œ์ž‘๋ ๋•Œ ํ• ๋‹น๋˜๊ณ  ํ”„๋กœ๊ทธ๋žจ์ด ๋๋‚ ๋•Œ ํŒŒ๊ดด๋œ๋‹ค. ์ด๋ง์ธ์ฆ‰์Šจ ํ•จ์ˆ˜๊ฐ€ ๋๋‚˜๋„ ๊ทธ ๊ฐ’์„ ๊ธฐ์–ตํ•˜๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.
๋‚ด๋ถ€์ •์ ๋ณ€์ˆ˜๋Š” ๋‹ค๋ฆ„ํ•จ์ˆ˜์—์„œ๋Š” ์ฐธ์กฐํ•  ์ˆ˜ ์—†๋‹ค.
substr
char *ft_substr(char const *s, unsigned int start, size_t len);
s ์•ˆ์—์„œ start ๋ถ€ํ„ฐ์˜ substr์„ ๋ฝ‘๋Š” ํ•จ์ˆ˜์ด๋‹ค. ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋กœ๋Š” s๊ฐ€ null์ผ ๋•Œ ๋ฐ˜ํ™˜๋˜ํ•œ null ๋กœ ํ•˜๊ณ  , s์˜ ๊ธธ์ด๊ฐ€ start๋ณด๋‹ค ์ž‘๋‹ค๋ฉด ๋นˆ๋ฌธ์ž์—ด์„ ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹นํ•˜์—ฌ ๋ฆฌํ„ดํ•œ๋‹ค. len ์€ ์ตœ๋Œ€๊ธธ์ด๋กœ ๋งŒ์•ฝ s + start๋ถ€ํ„ฐ์˜ ๊ธธ์ด๊ฐ€ len ๋ณด๋‹ค ์ž‘๊ฒŒ๋œ๋‹ค๋ฉด len = s + start๊นŒ์ง€์˜ ๊ธธ์ด๋กœ ํ•˜๋ฉด ๋œ๋‹ค.
ย 
strjoin
char *ft_strjoin(char const *s1, char const *s2);
๋‘ ๋ฌธ์ž์—ด์„ ๋ถ™์ด๋Š” ํ˜•์‹์˜ ํ•จ์ˆ˜์ด๋‹ค. ์ด๋•Œ ์ฃผ์˜ํ•  ์ ์€ ๋‘ ๋ฌธ์ž์—ด ์ค‘ NULL์ด ์กด์žฌํ•  ๋•Œ์ด๋‹ค. ๋‘˜๋‹ค NULL์ด๋ฉด NULL์„ ๋ฐ˜ํ™˜ํ•˜๋ฉด ๋˜๊ณ  ํ•˜๋‚˜๋งŒ NULL์ด๋ฉด NULL์ด ์•„๋‹Œ ๋ฌธ์ž์—ด์„ strdupํ•จ์ˆ˜๋กœ ๋ฆฌํ„ดํ•ด ์ฃผ๋ฉด ๋œ๋‹ค.๋‘˜๋‹ค NULL์ด ์•„๋‹ˆ๋ผ๋ฉด ๊ฐ„๋‹จํžˆ malloc์œผ๋กœ ํ• ๋‹น์„ ํ•ด์ฃผ๊ณ  ์ด ์ฃผ์†Œ์— strlcpy, strlcat์„ ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.
strtrim
char *ft_strtrim(char const *s1, char const *set);
s1์˜ ์–‘์˜†์„ set์— ํฌํ•จ๋œ ๊ฐ’๋“ค๋กœ trim ํ•˜์—ฌ ์ƒˆ๋กœ์šด ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹นํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค. strchr ๊ณผ strrchr์„ ์ด์šฉํ•˜์—ฌ set์„ trimํ•œ ์‹œ์ž‘์ ๊ณผ ๋์ ์„ ๋ฐ˜ํ™˜๋ฐ›๋Š” ํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ํŽธ์ด ์ข‹๋‹ค.
์ฃผ์˜ํ•ด์•ผํ•  ์ ๋“ค์€ ์‹œ์ž‘์ด ๋๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ฒŒ ๋œ๋‹ค๋ฉด ๋นˆ๋ฌธ์ž์—ด์„ ํ• ๋‹นํ•ด์„œ ๋ฐ˜ํ™˜ํ•˜์—ฌ์•ผ ํ•œ๋‹ค.
split
leaks Report Version: 4.0 Process 10427: 162 nodes malloced for 12 KB Process 10427: 5 leaks for 112 total leaked bytes. 5 (112 bytes) ROOT LEAK: 0x7fbbf9c05820 [48] 1 (16 bytes) 0x7fbbf9c05850 [16] length: 1 "1" 1 (16 bytes) 0x7fbbf9c05860 [16] length: 2 "22" 1 (16 bytes) 0x7fbbf9c05870 [16] length: 3 "333" 1 (16 bytes) 0x7fbbf9c05880 [16] length: 4 "4444"
*str ์ด๋ ‡๊ฒŒ ๋œจ๋Š”๋ฐ ์™œ 16๋ฐ”์ดํŠธ๋‚˜ ํ• ๋‹น์ด ๋˜์—ˆ๋Š”์ง€?
str์€ ์™œ 12๋ฐ”์ดํŠธ์”ฉ ํ• ๋‹น ๋˜์—ˆ๋Š”์ง€?
strmapi
char *ft_strmapi(char const *s, char (*f)(unsigned int, char));
๋ฌธ์ž์—ด s์— ๋Œ€ํ•ด ๊ฐ ๋ฌธ์ž๋งˆ๋‹ค ํ•จ์ˆ˜ f๋ฅผ ์ ์šฉํ•˜๋˜ f์˜ ์ฒซ๋ฒˆ์งธ ์ธ์ž๋Š” ์ธ๋ฑ์Šค, ๋‘๋ฒˆ์งธ ์ธ์ž๋Š” ํ•ด๋‹น ์ธ๋ฑ์Šค ๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ ์ƒˆ๋กœ์šด ๋ฌธ์ž์—ด์„ ์ƒ์„ฑํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
striteri
void ft_striteri(char *s, void (*f)(unsigned int, char*));
strmapi์™€ ์œ ์‚ฌํ•˜์ง€๋งŒ ๋ฆฌํ„ด๊ฐ’์ด ์—†๋Š” voidํ•จ์ˆ˜์ด๋ฉฐ ์ธ์ž๋กœ๋Š” ์ธ๋ฑ์Šค์™€ ๋ฌธ์ž์˜ ์ฃผ์†Œ๊ฐ’์„ ์‚ฌ์šฉํ•œ๋‹ค.
putchar_fd && putstr_fd
void ft_putchar_fd(char c, int fd); void ft_putstr_fd(char *s, int fd);
ํŒŒ์ผ์‹๋ณ„์ž๋ฅผ ํ†ตํ•ด ํ•ด๋‹นํŒŒ์ผ์— ๋ฌธ์ž, ๋ฌธ์ž์—ด์„ writeํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋„ฃ์–ด์ค€๋‹ค. ์ด๋•Œ fd๋Š” ์Œ์ˆ˜์ผ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.
ย 

bonus part

lstnew
t_list *ft_lstnew(void *content);
malloc์„ ํ†ตํ•ด ์ƒˆ๋กœ์šด ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹น์„ ํ•˜๊ณ  contents์— ๋“ฑ๋กํ›„ next๋…ธ๋“œ๋Š” NULL๋กœ ์„ค์ •ํ•ด์ค€๋‹ค.
lstadd_front
void ft_lstadd_front(t_list **lst, t_list *new);
๋งจ์•ž์˜ ๋…ธ๋“œ๋กœ new๋ฅผ ๋„ฃ์–ด์ฃผ๊ธฐ์œ„ํ•ด newโ†’next๋ฅผ ๋งจ์ฒ˜์Œ ๊ฐ’์˜ ์ฃผ์†Œ๋กœ ํ•ด์ฃผ๊ณ  lst์˜ ์ฒซ์ฃผ์†Œ๋ฅผ new์˜ ์ฃผ์†Œ๋กœ ๋ณ€๊ฒฝํ•ด์ฃผ๋ฉด ๋œ๋‹ค.
lstsize
int ft_lstsize(t_list *lst);
๊ฐ„๋‹จํžˆ ๋‹ค์Œ ๋…ธ๋“œ๋“ค์„ ํƒ์ƒ‰ํ•˜๋ฉฐ ๊ฐœ์ˆ˜๋ฅผ ์ƒˆ๋ฉด ๋œ๋‹ค.
lstlatst
t_list *ft_lstlast(t_list *lst);
lstโ†’next๊ฐ€ NULL์ธ ๋…ธ๋“œ๊ฐ€ ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ด๋•Œ์˜ ์ฃผ์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉด ๋œ๋‹ค.
lstadd_back
void ft_lstadd_back(t_list **lst, t_list *new);
lstadd_back์ด๋ž‘ ๋˜‘๊ฐ™์ง€๋งŒ ๋’ค์— ๋ถ™์ด๋Š” ๊ฒƒ์ด๋ผ ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.
lstdelone
void ft_lstdelone(t_list *lst, void (*del)(void *));
ํ• ๋‹น๋œ ๋ฆฌ์ŠคํŠธ๋ฅผ ํ•ด์ œํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค. ์ธ์ž๋กœ ๋ฐ›์€ lst์˜ content๋ฅผ delํ•จ์ˆ˜๋กœ ์ œ๊ฑฐํ•˜๊ณ  lst์ „์ฒด๋ฅผ free ํ•˜๋ฉด ๋œ๋‹ค.
lstclear
void ft_lstclear(t_list **lst, void (*del)(void *));
๋ฆฌ์ŠคํŠธ๋ฅผ ์ˆœํšŒํ•˜๋ฉด์„œ lstdelone์„ ์ ์šฉ์‹œ์ผœ์ฃผ๋ฉด ๋œ๋‹ค.
lstiter
void ft_lstiter(t_list *lst, void (*f)(void *));
๋‹จ์ˆœํžˆ ์ˆœํšŒํ•˜๋ฉด์„œ ๊ฐ content์— ํ•จ์ˆ˜ f๋ฅผ ์ ์šฉ์‹œํ‚ค๋ฉด ๋œ๋‹ค.
lstmap
t_list *ft_lstmap(t_list *lst, void *(*f)(void *), void (*del)(void *));
๋ฆฌ์ŠคํŠธ๋ฅผ ์ˆœํšŒํ•˜๋ฉด์„œ ๊ฐ content์— ํ•จ์ˆ˜ f๋ฅผ ์ ์šฉ์‹œํ‚ค๊ณ  ์ ์šฉ์‹œํ‚จ ๊ฒฐ๊ณผ๋“ค์„ content๋กœ ๋‹ด์€ ์ƒˆ๋กœ์šด ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์ฃผ์˜ํ•ด์•ผ ํ•  ์ ์€ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋ฉด์„œ ํ• ๋‹น์„ ํ•˜๊ฒŒ ๋ ๋•Œ ๋„๊ฐ€๋“œ๋ฅผ ์ž˜ ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค๋Š” ์ ์ด๋‹ค.

Loading Comments...