๐ฐ42์์ธ/libft (12) ์ธ๋ค์ผํ ๋ฆฌ์คํธํ [libft] ft_atoi.c ๊ตฌํ ๐atoi โ๏ธ ํจ์ ํ๋กํ ํ์ intatoi(const char *str); โ๏ธ ํจ์์ ์ญํ : str์ intํ์ผ๋ก ๋ฐํํ๋ค. โ๏ธํจ์ ๋ฐํ๊ฐ โ๏ธ ๋ฌธ์์ด์ ์ ์๋ก ๋ฐ๊พธ์ด ๋ฆฌํด ๐์ถ๊ฐ ์ค๋ช ๐ โฟ๋งจ ์์ ๊ณต๋ฐฑ๋ฌธ์๋ ์คํตํจ, ๋ถํธ๋ ํ๋๋ง ์์ด์ผํจ. ์ค๊ฐ์ '0' ~ '9' ์ธ์ ๋ฌธ์๊ฐ ์์ผ๋ฉด ๋ฉ์ถค. โฟatoi์ ๋ฐํ๊ฐ์ (int)strtol(str, (char **)NULL, 10); ์ ๊ฐ๋ค. --> long ๋ฒ์์์ intํ ๋ฒ์๋ฅผ ๋ฒ์ด๋ ๊ฒฝ์ฐ, ์ค๋ฒํ๋ก๋ ๊ฐ์ ๊ทธ๋๋ก ๋ฆฌํด --> long ๋ฒ์๋ฅผ ๋ฒ์ด๋ ๊ฒฝ์ฐ, ์์์ผ ๋ 0 ์์์ผ ๋ -1์ ๋ฆฌํดํจ. (โ๏ธ๋งฅ์์๋ long๋ฒ์์ longlong์ ๋ฒ์๊ฐ ๊ฐ๋ค.) โ๏ธ๊ตฌํ #include "libft.h" #include static unsig.. [libft] ft_memcpy, ft_memmove ๊ตฌํ ๐memcpy โ๏ธ ํจ์ ํ๋กํ ํ์ void*memcpy(void *restrict dst, const void *restrict src, size_t n); โ๏ธ ํจ์์ ์ญํ : ๋ฉ๋ชจ๋ฆฌ์์ญ src๋ก๋ถํฐ n ๋ฐ์ดํธ๋ฅผ ๋ฉ๋ชจ๋ฆฌ ์์ญ dst์ ๋ณต์ฌํ๋ค. โ๏ธํจ์ ๋ฐํ๊ฐ โ๏ธ dst ๐์ถ๊ฐ ์ค๋ช ๐ โฟ dst์ src์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด ๊ฒน์ณ์ ธ์๋ ๊ฒฝ์ฐ๋ undefined behavior์ด๋ค. (๊ฒน์ณ์ ธ ์๋ ๊ฒฝ์ฐ๋ memmove()๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.) โ๏ธ๊ตฌํ #include "libft.h" void*ft_memcpy(void *dst, const void *src, size_t n) { size_ti; i = 0; if (dst == 0 && src == 0) return (NULL); if (n == 0) .. [libft] ft_memset, ft_bzero, ft_memchr ๊ตฌํ ๐memset โ๏ธ ํจ์ ํ๋กํ ํ์ void*memset(void *b, int c, size_t len); โ๏ธ ํจ์์ ์ญํ : c ๊ฐ(unsigned char ๋ก ๋ณํ๋จ)์ len ๋ฐ์ดํธ ๊ธธ์ด๋งํผ ๋ฌธ์์ด b์ ์ด๋ค. โ๏ธํจ์ ๋ฐํ๊ฐ โ๏ธmemset ํจ์์ ์ฒซ ๋ฒ์งธ ์ธ์ โ๏ธ๊ตฌํ #include "libft.h" void*ft_memset(void *b, int c, size_t len) { size_ti; i = 0; while (i < len) { *(unsigned char *)(b + i) = (unsigned char)c; i++; } return (b); } ๐bzero โ๏ธ ํจ์ ํ๋กํ ํ์ voidbzero(void *s, size_t n); โ๏ธ ํจ์์ ์ญํ : 0 n๋ฐ์ดํธ๋ฅผ s์ ์ด.. [libft] ft_strncmp, ft_memcmp ๊ตฌํ ๐strncmp โ๏ธ ํจ์ ํ๋กํ ํ์ intstrncmp(const char *s1, const char *s2, size_t n); โ๏ธ ํจ์์ ์ญํ : ๋๋ก ์ข ๋ฃ๋๋ ๋ ๋ฌธ์์ด์ ๋น๊ตํ๋ค. n์ ๋์ด๊ฐ๋ ๊ธธ์ด๋ฅผ ๋น๊ตํ์ง ์๋๋ค. โ๏ธํจ์ ๋ฐํ๊ฐ โ๏ธ s1 > s2 , ์์ โ๏ธ s1 == s2 , 0 โ๏ธ s1 < s2, ์์ ๐์ถ๊ฐ ์ค๋ช ๐ โฟstrncmp๋ binary data๋ณด๋ค๋ ๋ฌธ์์ด์ ๋น๊ตํ๊ธฐ ์ํด ๋ง๋ค์ด์ง ํจ์๋ก ๋ ๋ค์ ๋ํ๋๋ ๋ฌธ์๋ ๋น๊ตํ์ง ์๋๋ค. โฟ๊ธธ์ด๊ฐ 0์ธ ๋ฌธ์์ด์ ํญ์ ๊ฐ๋ค. โฟunsigned char๋ฅผ ์ด์ฉํ์ฌ ๋น๊ตํ๋ฏ๋ก '\200'์ด '\0'๋ณด๋ค ํฌ๋ค. โ๏ธ๊ตฌํ #include "libft.h" intft_strncmp(const char *s1, const char .. [42์์ธ] libft ์ ๋ฆฌ : ft_strchr, ft_strrchr๊ตฌํ ๐strchr โ๏ธ ํจ์ ํ๋กํ ํ์ char*strchr(const char *s, int c); โ๏ธ ํจ์์ ์ญํ : ๋ฌธ์์ด์์ ์ฒ์ ๋ฐ๊ฒฌ๋๋ c๋ฅผ ๋ฐํํ๋ค. โ๏ธํจ์ ๋ฐํ๊ฐ โ๏ธ c๊ฐ ๋ฌธ์์ด ๋ด์ ์กด์ฌํ ๊ฒฝ์ฐ, c๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ โ๏ธ c๊ฐ ๋ฌธ์์ด ๋ด์ ์กด์ฌํ์ง ์์ ๊ฒฝ์ฐ, NULL โ๏ธ๊ตฌํ char*ft_strchr(const char *s, int c) { inti; char*p; i = 0; p = (char *)s; while (p[i] != 0) { if ((char)c == p[i]) return (p + i); i++; } if (c == 0) return (p + i); else return (NULL); } ๐strrchr โ๏ธ ํจ์ ํ๋กํ ํ์ char*strrchr(const .. [42์์ธ] libft ์ ๋ฆฌ : ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ง๋ค๊ธฐ ์ํ Makefile ๐makefile ๋ง๋ค๊ธฐ! ์ ๊ธฐํ makefile ์ธ๊ณ... ๋๊ฒ ์ ์ ๋ก ๋๋ ๋๋์ด๋น libft ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ง๋ค๊ธฐ ์ํ makefile ์ฝ๋์ด๋ค. ํ๊ฒ์ libft.a SRCS=ft_isalnum.c ft_isprint.c ft_memcmp.c ft_putchar_fd.c ft_split.c \ ft_strlcat.c ft_strncmp.c ft_substr.c ft_atoi.c ft_isalpha.c \ ft_itoa.c ft_memcpy.c ft_putendl_fd.c ft_strchr.c ft_strlcpy.c \ ft_strnstr.c ft_tolower.c ft_bzero.c ft_isascii.c \ ft_memmove.c ft_putnbr_fd.c ft_strdup.c ft_strlen... [42์์ธ] libft ์ ๋ฆฌ : ft_strlen, ft_strlcpy, ft_strlcat ๊ตฌํ ๐strlen โ๏ธ ํจ์ ํ๋กํ ํ์ size_tstrlen(const char *s); โ๏ธ ํจ์์ ์ญํ : ๋ฌธ์์ด์ ๊ธธ์ด๋ฅผ ๋ฐํ โ๏ธํจ์ ๋ฐํ๊ฐ โ๏ธ ๋ฌธ์์ด์ ๊ธธ์ด โ๏ธ๊ตฌํ #include "libft.h" size_tft_strlen(const char *s) { size_tlen; len = 0; while (*s) { s++; len++; } return (len); } ๐strlcpy โ๏ธ ํจ์ ํ๋กํ ํ์ size_tstrlcpy(char * restrict dst, const char * restrict src, size_t dstsize); โ๏ธ ํจ์์ ์ญํ : ๋ฌธ์์ด์ src์์ dstsize๋งํผ dst์ ๋ณต์ฌ โ๏ธํจ์ ๋ฐํ๊ฐ โ๏ธ src ๋ฌธ์์ด์ ๊ธธ์ด โ๏ธ๊ตฌํ #include "lib.. [42์์ธ] libft ์ ๋ฆฌ : ft_toupper, ft_tolower ๊ตฌํ ๐toupper โ๏ธ ํจ์ ํ๋กํ ํ์ intft_toupper(int c); โ๏ธ ํจ์์ ์ญํ : c๊ฐ ์๋ฌธ์ ์ํ๋ฒณ์ผ ๊ฒฝ์ฐ ๋๋ฌธ์๋ก ๋ณ๊ฒฝ โ๏ธํจ์ ๋ฐํ๊ฐ โ๏ธ ๋ณ๊ฒฝ๋ c (๋ณ๊ฒฝ๋์ง ์์์ ๊ฒฝ์ฐ ๊ทธ๋๋ก c๋ฅผ ๋ฆฌํด) โ๏ธ ๊ตฌํ intft_toupper(int c) { if ('a' ์ด์ 1 2 ๋ค์