๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿฐ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'