Search
๐Ÿ“š

Libft

Created
2020/12/31
tag
42์„œ์šธ
42Seoul
libc
Libft

Subjects

โ€ข
โ€ข
โ€ข

1. ํ”„๋กœ์ ํŠธ ๊ฐœ์š” ๋ฐ ํŒ

์ด๋ฒˆ ํ”„๋กœ์ ํŠธ๋Š” libc์— ์žˆ๋Š” ์ผ๋ถ€ ๋ชจ๋“ˆ์„ ์ง์ ‘ ๊ตฌํ˜„ํ•˜์—ฌ ์ •์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๋‹ค. ์ฐจํ›„์— ์ •์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํ•จ์ˆ˜๋“ค์€ ์ตœ๋Œ€ํ•œ ์ด์šฉํ•˜์—ฌ ๋‚ด๋ถ€์ ์œผ๋กœ ์œ ์ง€ํ•˜๋Š” static ํ•จ์ˆ˜๋ฅผ ์ตœ์†Œํ™”ํ•ด๋ณด์ž. ์ •์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ผ๋Š” ์˜๋ฏธ๋ฅผ ์ตœ๋Œ€ํ•œ ๊ธฐ์–ตํ•˜์—ฌ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•œ๋‹ค.

1) ๊ตฌํ˜„ ์ˆœ์„œ ๊ฐ€์ด๋“œ

1.
memset โ†’ bzero โ†’ calloc
2.
strlcpy โ†’ substr โ†’ strjoin โ†’ split
3.
memcmp โ†’ strnstr
4.
strchr โ†’ strtrim
5.
lstnew โ†’ lstdelone โ†’ lstclear โ†’ lstlast โ†’ lstadd_back โ†’ lstmap

2) const char * vs char const * vs char * const

int main(void) { // s1, s2 equivalent -> cannot change value, afford to change address // s3 -> afford to change value, cannot change address const char *s1 = "123"; char const *s2 = "456"; char *const s3 = "789"; // upper one error // *s1 = '0'; // ++s1; // upper one error // *s2 = '0'; // ++s2; // lower one error // *s3 = '0'; // ++s3; return (0); }
C

2. libft.a

1) memset

#include <string.h> void* memset(void* dest, int c, size_t n);
C
dest ์˜ ์ฃผ์†Œ๋ถ€ํ„ฐ size ๋ฐ”์ดํŠธ๋ฅผ value ๊ฐ’์œผ๋กœ ์ฑ„์šด๋‹ค. ์ด ๋•Œ, value ๋Š” unsigned char ๋กœ ํ˜•๋ณ€ํ™˜๋˜๊ณ  ๋ฐ”์ดํŠธ ๋‹จ์œ„๋กœ ๊ฐ’์„ ์ดˆ๊ธฐํ™” ํ•˜๊ฒŒ ๋œ๋‹ค. ๋”ฐ๋ผ์„œ memset์˜ charํ˜• ์ดˆ๊ธฐํ™”๋Š” ๋ฌธ์ œ๊ฐ€ ์—†์œผ๋‚˜, int ๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™”๋Š” ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. int ๊ฐ’ ์ค‘์—์„œ๋„ memset์œผ๋กœ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ํ˜•๋ณ€ํ™˜ ๋˜์–ด ์ด์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ˆ˜๋Š” 0๊ณผ -1์ด๋‹ค.
0์€ 1 ๋ฐ”์ดํŠธ ๊ธฐ์ค€ 2์ง„์ˆ˜๋กœ 0000000000000000์ด๊ณ , 4 ๋ฐ”์ดํŠธ๋กœ๋Š” 0000000000000000000000000000000000000000000000000000000000000000์ด๋‹ค. 1 ๋ฐ”์ดํŠธ ๋‹จ์œ„๋กœ ์“ฐ์—ฌ๋„ 0์œผ๋กœ ์ดˆ๊ธฐํ™” ๋œ๋‹ค.
-1์€ 1 ๋ฐ”์ดํŠธ ๊ธฐ์ค€ 2์ง„์ˆ˜๋กœ 1111111111111111์ด๊ณ , 4 ๋ฐ”์ดํŠธ๋กœ๋Š” 1111111111111111111111111111111111111111111111111111111111111111์ด๋‹ค. 1 ๋ฐ”์ดํŠธ ๋‹จ์œ„๋กœ ์“ฐ์—ฌ๋„ -1์œผ๋กœ ์ดˆ๊ธฐํ™” ๋œ๋‹ค.
int๋กœ ์ดˆ๊ธฐํ™” ํ•˜๋Š” ๊ฒƒ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ์ดํ•ดํ•ด๋ณด์ž.
int main(void) { int memset_with_0[5]; int memset_with_1[5]; memset(memset_with_0, 0, sizeof(memset_with_0)); memset(memset_with_1, 1, sizeof(memset_with_1)); //memset_with_0 ์ถœ๋ ฅ printf("memset_with_0 : "); for (int i = 0; i < 5; i++) printf("%d ", *(memset_with_0 + i)); //memset_with_1 ์ถœ๋ ฅ printf("\nmemset_with_1 : "); for (int i = 0; i < 5; i++) printf("%d ", *(memset_with_1 + i)); return 0; }
C
์œ„์™€ ๊ฐ™์ด ๋‘ ๋ฐฐ์—ด์„ 0๊ณผ 1๋กœ ์ดˆ๊ธฐํ™” ํ•œ๋‹ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ์ถœ๋ ฅ๋œ๋‹ค. memset ํ•จ์ˆ˜๋Š” ๋ฐ”์ดํŠธ ๋‹จ์œ„๋กœ ๊ฐ’์„ ์ดˆ๊ธฐํ™” ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์˜ˆ์ƒ๊ณผ๋Š” ๋‹ค๋ฅธ ๊ฒฐ๊ณผ ๊ฐ’์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
0 0 0 0 0 16843009 16843009 16843009 16843009 16843009
Plain Text
memset์€ 1 ๋ฐ”์ดํŠธ ๋‹จ์œ„๋กœ ์ดˆ๊ธฐํ™” ์‹œํ‚จ๋‹ค. ๋”ฐ๋ผ์„œ 4๋ฐ”์ดํŠธ ํฌ๊ธฐ๋ฅผ ๊ฐ–๋Š” int ๋ฐ์ดํ„ฐ์— ๊ฐ ๋ฐ”์ดํŠธ๋ฅผ 1๋กœ ์ดˆ๊ธฐํ™” ํ•˜๊ฒŒ ๋˜๋ฉด 0000001 00000001 00000001 00000001 ๊ณผ ๊ฐ™์€ ํ˜•ํƒœ๋ฅผ ๋„๊ฒŒ ๋œ๋‹ค.
๋”ฐ๋ผ์„œ 2์ง„์ˆ˜๋กœ ํ‘œํ˜„๋œ ๊ฐ’์„ ํ™•์ธํ•ด๋ณด๋ฉด ์œ„์ฒ˜๋Ÿผ 1648300916483009์˜ ๊ฐ’์„ ๊ฐ€์ง„์ฑ„๋กœ int ๋ฐฐ์—ด์ด ์ดˆ๊ธฐํ™” ๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. memset์€ 1 ๋ฐ”์ดํŠธ ๋‹จ์œ„์˜ ์ดˆ๊ธฐํ™”๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์—ผ๋‘์— ๋‘ฌ์•ผ ํ•˜๊ณ , 1 ๋ฐ”์ดํŠธ ๋‹จ์œ„์˜ ์ดˆ๊ธฐํ™” ๋•Œ๋ฌธ์— char ํ˜•ํƒœ์˜ ๋ฐฐ์—ด์— ์ ํ•ฉํ•˜๋ฉฐ string.h์— ๋“ค์–ด์žˆ๋Š” ํ•จ์ˆ˜์ธ ๊ฒƒ๋„ ์ด ๋•Œ๋ฌธ์ž„์„ ์œ ์ถ”ํ•  ์ˆ˜ ์žˆ๋‹ค.

2) bzero

ํ•จ์ˆ˜ ์›ํ˜•

#include <string.h> void bzero(void* dest, size_t size);
C

ํ•จ์ˆ˜ ์„ค๋ช…

memset๊ณผ ๋น„์Šทํ•œ ์—ญํ• ์„ ํ•œ๋‹ค. C ์–ธ์–ด ๋น„ํ‘œ์ค€์ด๋ฉฐ deprecated๋œ ํ•จ์ˆ˜์ด๋ฏ€๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. bzero, ZeroMemory ๋Œ€์‹ ์— C ์–ธ์–ด ํ‘œ์ค€์œผ๋กœ ์ด์šฉ๋˜๋Š” memset์„ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. ํ•จ์ˆ˜ ์ด๋ฆ„์ฒ˜๋Ÿผ str ์ฃผ์†Œ๊ฐ’๋ถ€ํ„ฐ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ size ํฌ๊ธฐ์˜ ๋ฐ”์ดํŠธ๋งŒํผ 0 ์œผ๋กœ ์ฑ„์šด๋‹ค.
deprecated ํ•จ์ˆ˜๋Š” ์•„๋ž˜ ๋งํฌ๋ฅผ ํ†ตํ•ด ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค.

3) calloc

ํ•จ์ˆ˜ ์›ํ˜•

#include <stdlib.h> void* calloc(size_t count, size_t size);
C

ํ•จ์ˆ˜ ์„ค๋ช…

Heap ๊ณต๊ฐ„์œผ๋กœ๋ถ€ํ„ฐ count * size๋งŒํผ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹น ํ›„, ๊ทธ ๊ณต๊ฐ„์œผ ๋ชจ๋‘ 0์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.

Return Value

ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ๋ฅผ ๋ฐ˜ํ™˜

4) memcpy

ํ•จ์ˆ˜ ์›ํ˜•

#include <string.h> void* memcpy(void* restrict dest, const void* restrict src, size_t size);
C

ํ•จ์ˆ˜ ์„ค๋ช…

src๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ณณ ๋ถ€ํ„ฐ size๋ฐ”์ดํŠธ๋งŒํผ dest์— ๋ณต์‚ฌํ•œ๋‹ค.

Return Value

dest ๋ฅผ ๋ฐ˜ํ™˜

5) memccpy

ํ•จ์ˆ˜ ์›ํ˜•

#include <string.h> void* memccpy(void* restrict dest, const void* restrict src, int ch, size_t size);
C

ํ•จ์ˆ˜ ์„ค๋ช…

src ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ณณ ๋ถ€ํ„ฐ size ๋ฐ”์ดํŠธ๋งŒํผ dest์— ๋ณต์‚ฌํ•œ๋‹ค. ๋งŒ์•ฝ src์—์„œ ๋ฌธ์ž ch๋ฅผ ๋งŒ๋‚˜๋ฉด ch๊นŒ์ง€๋งŒ ๋ณต์‚ฌ๋ฅผ ์ง„ํ–‰ํ•˜๊ณ  ๋ณต์ œ๋ฅผ ์ค‘๋‹จํ•œ๋‹ค.

Return Value

โ€ข
๋ณต์‚ฌ๋œ dest๋ณ€์ˆ˜์—์„œ ๋ณต์‚ฌ๊ฐ€ ๋๋‚œ ๋ฐ”๋กœ ๋‹ค์Œ ์ฃผ์†Œ๋ฅผ ๋ฐ˜ํ™˜
โ€ข
๋ฌธ์ž ch๋ฅผ ๋งŒ๋‚˜์ง€ ์•Š์•˜๋‹ค๋ฉด, size ๋ฐ”์ดํŠธ๋ฅผ ๋ณต์‚ฌํ•˜๊ณ  NULL์„ ๋ฐ˜ํ™˜

6) memmove

ํ•จ์ˆ˜ ์›ํ˜•

#include <string.h> void* memmove(void* dest, const void* src, size_t size);
C

ํ•จ์ˆ˜ ์„ค๋ช…

src ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ณณ ๋ถ€ํ„ฐ size ๋ฐ”์ดํŠธ ๋งŒํผ dest ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ณณ์œผ๋กœ ์˜ฎ๊ธด๋‹ค. ๋ฒ„ํผ๋ฅผ ์ด์šฉํ•˜๋ฏ€๋กœ dest ์™€ src ๊ฐ€ ๊ฒน์ณ๋„ ๋ฌธ์ œ ์—†๋‹ค.

Return Value

dest๋ฅผ ๋ฐ˜ํ™˜

7) memchr

ํ•จ์ˆ˜ ์›ํ˜•

#include <string.h> void* memchr(const void* dest, int ch, size_t size);
C

ํ•จ์ˆ˜ ์„ค๋ช…

dest ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ณณ ๋ถ€ํ„ฐ size ๋ฐ”์ดํŠธ ๊นŒ์ง€ ์ค‘ ์ฒ˜์Œ์œผ๋กœ ch ์™€ ์ผ์น˜ํ•˜๋Š” ๊ฐ’์„ ์ฐพ๋Š”๋‹ค. ch๋Š” unsigned char๋กœ ํ•ด์„๋œ๋‹ค.

Return Value

โ€ข
๋ฌธ์ž ch ๋ฅผ ๋งŒ๋‚ฌ๋‹ค๋ฉด ํ•ด๋‹น ์ฃผ์†Œ๋ฅผ ๋ฐ˜ํ™˜
โ€ข
๋ฌธ์ž ch๋ฅผ ๋งŒ๋‚˜์ง€ ์•Š์•˜๋‹ค๋ฉด NULL์„ ๋ฐ˜ํ™˜

8) memcmp

ํ•จ์ˆ˜ ์›ํ˜•

#include <string.h> int memcmp(const void* ptr1, const void* ptr2, size_t size);
C

ํ•จ์ˆ˜ ์„ค๋ช…

๋‘ ๋ฉ”๋ชจ๋ฆฌ ๋ธ”๋ก์„ ๋น„๊ตํ•œ๋‹ค. ptr1์ด ๊ฐ€๋ฆฌํ‚ค๋Š” size๋ฐ”์ดํŠธ์˜ ๋ฐ์ดํ„ฐ์™€ ptr2๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” size๋ฐ”์ดํŠธ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋น„๊ตํ•œ๋‹ค.

Return Value

โ€ข
๋‘ ๋ฉ”๋ชจ๋ฆฌ ๋ธ”๋ก์ด ๊ฐ™์œผ๋ฉด 0์„ ๋ฐ˜ํ™˜
โ€ข
๋‘ ๋ฉ”๋ชจ๋ฆฌ ๋ธ”๋ก์ด ๊ฐ™์ง€ ์•Š๋‹ค๋ฉด *ptr1 - *ptr2 ๊ฐ’์„ ๋ฐ˜ํ™˜
โ†’ ๋‘ ๋ฉ”๋ชจ๋ฆฌ ๋ธ”๋ก์ด ๋‹ค๋ฅธ ๊ณณ์—์„œ ptr1์˜ ๊ฐ’์ด ๋” ํฌ๋ฉด 0 ๋ณด๋‹ค ํฐ ๊ฐ’์„ ๋ฐ˜ํ™˜
โ†’ ๋‘ ๋ฉ”๋ชจ๋ฆฌ ๋ธ”๋ก์ด ๋‹ค๋ฅธ ๊ณณ์—์„œ ptr2์˜ ๊ฐ’์ด ๋” ํฌ๋ฉด 0 ๋ณด๋‹ค ์ž‘์€ ๊ฐ’์„ ๋ฐ˜ํ™˜

ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค

const char s1[] = "atoms\0\0\0\0"; // extra null bytes at end const char s2[] = "atoms\0abc";
C

9) strlcpy

ํ•จ์ˆ˜ ์›ํ˜•

#include <string.h> size_t strlcpy(char* dest, const char* src, size_t size);
C

ํ•จ์ˆ˜ ์„ค๋ช…

โ€ข
์›๋ฆฌ๋Š” strncpy์™€ ๋น„์Šทํ•˜์ง€๋งŒ strncpyํ•จ์ˆ˜๋ณด๋‹ค ์˜ค๋ฅ˜๊ฐ€ ์ ์€ ํ•จ์ˆ˜์ด๋‹ค.
โ€ข
strncpy์˜ ๊ฒฝ์šฐ NULL ๋ฌธ์ž ์‚ฝ์ž…์„ ๋ณด์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค.
โ€ข
strlcpy๋Š” size๊ฐ€ 0์ด ์•„๋‹Œ ๊ฒฝ์šฐ size - 1 ๊นŒ์ง€ ๋ณต์‚ฌ๋ฅผ ์ง„ํ–‰ํ•˜๊ณ  ๋งˆ์ง€๋ง‰์— NULL์„ ์‚ฝ์ž…ํ•ด์ค€๋‹ค.

Return Value

src์˜ ๊ธธ์ด๋ฅผ ๋ฐ˜ํ™˜

10) strlen

ํ•จ์ˆ˜ ์›ํ˜•

#include <string.h> size_t strlen(const char* str);
C

ํ•จ์ˆ˜ ์„ค๋ช…

๋ฌธ์ž์—ด str์˜ ๊ธธ์ด๋ฅผ ๊ตฌํ•œ๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์€ ๊ตฌ๋ฌธ์—์„œ๋Š” 100์„ ๋ฆฌํ„ดํ•˜์ง€ ์•Š๊ณ  12๋ฅผ ๋ฆฌํ„ดํ•˜๊ฒŒ ๋œ๋‹ค.
char str[100] = "Hello World!";
C
strlen ํ•จ์ˆ˜๋Š” ๋ฌธ์ž์—ด์˜ ๋งˆ์ง€๋ง‰ NULL ๋ฌธ์ž์— ์˜ํ•ด ๊ธธ์ด๋ฅผ ๊ฒฐ์ •ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

Return Value

๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋ฅผ ๋ฐ˜ํ™˜

11) strlcat

ํ•จ์ˆ˜ ์›ํ˜•

#include <string.h> size_t strlcat(char* dest, const char* src, size_t size);
C

ํ•จ์ˆ˜ ์„ค๋ช…

dest์˜ ๋งˆ์ง€๋ง‰ ์œ„์น˜์— size - strlen(dest) - 1 ๋งŒํผ ๋ณต์‚ฌํ•˜๊ณ  ๋์— NULL์„ ์‚ฝ์ž…ํ•œ๋‹ค.

Return Valu e

โ€ข
size๊ฐ€ dest์˜ ํฌ๊ธฐ๋ณด๋‹ค ์ž‘์„ ๋•Œ, strlen(src) + size๋ฅผ ๋ฐ˜ํ™˜
โ€ข
size๊ฐ€ dest์˜ ํฌ๊ธฐ๋ณด๋‹ค ํด ๋•Œ, strlen(src) + strlen(dest)๋ฅผ ๋ฐ˜ํ™˜

12) strchr

ํ•จ์ˆ˜ ์›ํ˜•

#include <string.h> char* strchr(const char *s, int c);
C

ํ•จ์ˆ˜ ์„ค๋ช…

s๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฌธ์ž์—ด์—์„œ ์ฒซ ๋ฒˆ์งธ c (char๋กœ ๋ณ€ํ™˜)๋ฅผ ์ฐพ๋Š”๋‹ค. c๋Š” ๊ฒ€์ƒ‰ํ•  ๋ฌธ์ž๋ฅผ ์˜๋ฏธํ•˜๊ณ  int๋กœ ํ˜• ๋ณ€ํ™˜ ๋˜์–ด์„œ ์ „๋‹ฌ๋˜์ง€๋งŒ, ํ•จ์ˆ˜ ๋‚ด๋ถ€์ ์œผ๋กœ ๋‹ค์‹œ char๋กœ ์ฒ˜๋ฆฌ๋œ๋‹ค. ๋งˆ์ง€๋ง‰ NULL ๋ฌธ์ž๋„ ๋ฌธ์ž์—ด์˜ ์ผ๋ถ€๋กœ ๊ฐ„์ฃผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด ํ•จ์ˆ˜๋Š” ๋ฌธ์ž์—ด์˜ ๋งจ ๋ ๋ถ€๋ถ„์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ๋ฅผ ์–ป๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

Return Value

โ€ข
s์—์„œ ๋ฌธ์ž์—ด์˜ ์ฒซ ๋ถ€๋ถ„๋ถ€ํ„ฐ ๊ฒ€์ƒ‰ํ•˜์—ฌ ์ฐพ๊ณ ์ž ํ•˜๋Š” ๋ฌธ์ž๊ฐ€ ๊ฐ€์žฅ ๋จผ์ € ๋‚˜ํƒ€๋‚˜๋Š” ์ฃผ์†Œ๋ฅผ ๋ฐ˜ํ™˜
โ€ข
ํ•ด๋‹นํ•˜๋Š” ๋ฌธ์ž๊ฐ€ ์—†๋‹ค๋ฉด NULL์„ ๋ฐ˜ํ™˜

13) strrchr

ํ•จ์ˆ˜ ์›ํ˜•

#include <string.h> char* strrchr(const char *s, int c);
C

ํ•จ์ˆ˜ ์„ค๋ช…

s๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฌธ์ž์—ด์—์„œ ๋งˆ์ง€๋ง‰ c (char๋กœ ๋ณ€ํ™˜)๋ฅผ ์ฐพ๋Š”๋‹ค. c๋Š” ๊ฒ€์ƒ‰ํ•  ๋ฌธ์ž๋ฅผ ์˜๋ฏธํ•˜๊ณ  int๋กœ ํ˜• ๋ณ€ํ™˜ ๋˜์–ด์„œ ์ „๋‹ฌ๋˜์ง€๋งŒ, ํ•จ์ˆ˜ ๋‚ด๋ถ€์ ์œผ๋กœ ๋‹ค์‹œ char๋กœ ์ฒ˜๋ฆฌ๋œ๋‹ค. ๋งˆ์ง€๋ง‰ NULL ๋ฌธ์ž๋„ ๋ฌธ์ž์—ด์˜ ์ผ๋ถ€๋กœ ๊ฐ„์ฃผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด ํ•จ์ˆ˜๋Š” ๋ฌธ์ž์—ด์˜ ๋งจ ๋ ๋ถ€๋ถ„์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ๋ฅผ ์–ป๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

Return Value

โ€ข
s์—์„œ ๋ฌธ์ž์—ด์˜ ๋ ๋ถ€๋ถ„๋ถ€ํ„ฐ ๊ฒ€์ƒ‰ํ•˜์—ฌ ์ฐพ๊ณ ์ž ํ•˜๋Š” ๋ฌธ์ž๊ฐ€ ๊ฐ€์žฅ ๋จผ์ € ๋‚˜ํƒ€๋‚˜๋Š” ์ฃผ์†Œ๋ฅผ ๋ฐ˜ํ™˜
โ€ข
ํ•ด๋‹นํ•˜๋Š” ๋ฌธ์ž๊ฐ€ ์—†๋‹ค๋ฉด NULL์„ ๋ฐ˜ํ™˜

14) strnstr

ํ•จ์ˆ˜ ์›ํ˜•

#include <string.h> char* strnstr(const char *haystack, const char *needle, size_t len);
C

ํ•จ์ˆ˜ ์„ค๋ช…

๋ฌธ์ž์—ด haystack์—์„œ NULL๋กœ ๋๋‚˜๋Š” ๋ฌธ์ž์—ด needle์˜ ์ฒซ ๋ฒˆ์งธ ๋ถ€๋ถ„์„ ์ฐพ๋Š”๋‹ค. ์—ฌ๊ธฐ์„œ haystack ์€ len ๋ฌธ์ž ์ดํ•˜๋กœ ๊ฒ€์ƒ‰๋œ๋‹ค. NULL ๋ฌธ์ž ๋’ค์— ๋‚˜ํƒ€๋‚˜๋Š” ๋ฌธ์ž๋Š” ๊ฒ€์ƒ‰๋˜์ง€ ์•Š๋Š”๋‹ค.

Return Value

โ€ข
needle๊ฐ’์ด ๋น„์–ด ์žˆ๋‹ค๋ฉด haystack๋ฅผ ๋ฐ˜ํ™˜
โ€ข
haystack๋ฌธ์ž์—ด์—์„œ needle ๋ฌธ์ž์—ด์„ ์ฐพ์ง€ ๋ชปํ•˜๋ฉด NULL์„ ๋ฐ˜ํ™˜
โ€ข
needle ๋ฌธ์ž์—ด์„ ์ฐพ์œผ๋ฉด, haystack์—์„œ needle ๋ฌธ์ž์—ด ์‹œ์ž‘ ๋ถ€๋ถ„ ์œ„์น˜ ์ฃผ์†Œ๋ฅผ ๋ฐ˜ํ™˜

ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค

#include<string.h> #include<stdio.h> int main() { char *haystack = "This"; char *needle = "is"; char *k = strnstr(haystack, needle, 4); printf("%c", *k); // output : i return (0); }
C
#include<string.h> #include<stdio.h> int main() { char *haystack = "This"; char *needle = "is"; char *k = strnstr(haystack, needle, 3); printf("%c", *k); // output : segmentation fault return (0); }
C
#include <stdio.h> #include <string.h> int main (void) { char str1[10] = "book"; char str2[5] = "oo"; char str3[5] = "o"; char str4[5] = "go"; char str5[5] = "og"; char str5[5] = "ob"; char str6[5] = "ookg"; printf("book - oo : %p\n", strnstr(str1, str2, 4)); printf("book - o : %p\n", strnstr(str1, str3, 4)); printf("book - go : %p\n", strnstr(str1, str4, 4)); printf("book - og : %p\n", strnstr(str1, str5, 4)); printf("book - ob : %p\n", strnstr(str1, str5, 4)); printf("book - ookg : %p\n", strnstr(str1, str6, 4)); printf("book - oo - 0byte : %p\n", strnstr(str1, str2, 0)); return (0); }
C
book - oo : 0x7ffee3c9daef book - o : 0x7ffee3c9daef book - go : 0x0 book - og : 0x0 book - ob : 0x0 book - ookg : 0x0 book - oo - 0byte : 0x0
C

15) strncmp

ํ•จ์ˆ˜ ์›ํ˜•

#include <string.h> int strncmp(const char *s1, const char *s2, size_t n);
C

ํ•จ์ˆ˜ ์„ค๋ช…

strncmp ํ•จ์ˆ˜๋Š” ๋ฌธ์ž์—ด์„ n์ž ์ดํ•˜๋กœ ๋น„๊ตํ•œ๋‹ค. s1, s2๋Š” ๊ฐ๊ฐ ์„œ๋กœ ๋น„๊ตํ•  ๋ฌธ์ž์—ด๋“ค์ด๋‹ค. n์€ (์ฒ˜์Œ๋ถ€ํ„ฐ) ๋น„๊ตํ•  ์ตœ๋Œ€ ๋ฌธ์ž์˜ ๊ฐœ์ˆ˜์ด๋‹ค. ๋งค๋‰ด์–ผ์— ์“ฐ์—ฌ ์žˆ๋Š” lexicographically์˜ ๋œป์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค. ๋” ์ž์„ธํ•œ ๊ฒƒ์€ ์•„๋ž˜ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ•˜์ž.
DESCRIPTION The strcmp and strncmp functions lexicographically compare the null-terminated strings s1 and s2.

Return Value

โ€ข
๋งŒ์ผ n๊ฐœ์˜ ๋ฌธ์ž๊ฐ€ ๋ชจ๋‘ ์ผ์น˜ํ•œ๋‹ค๋ฉด, 0์„ ๋ฐ˜ํ™˜
โ€ข
๋น„๊ตํ•œ n๊ฐœ์˜ ๋ฌธ์ž ์ค‘ ์ตœ์ดˆ๋กœ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ๋ฌธ์ž์˜ ๊ฐ’์ด s1์ด ๋” ํฐ ๊ฒฝ์šฐ 0๋ณด๋‹ค ํฐ ๊ฐ’์„, s2๊ฐ€ ๋” ํฐ ๊ฒฝ์šฐ 0๋ณด๋‹ค ์ž‘์€ ๊ฐ’์„ ๋ฐ˜ํ™˜

ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค

const char s1[] = "atoms\0\0\0\0"; // extra null bytes at end const char s2[] = "atoms\0abc";
C

16) atoi

ํ•จ์ˆ˜ ์›ํ˜•

#include <stdlib.h> int atoi(const char *str);
C

ํ•จ์ˆ˜ ์„ค๋ช…

๊ถ๊ทน์ ์ธ ๋ชฉํ‘œ๋Š” ์ˆซ์ž๋กœ ํ‘œํ˜„๋˜๋Š” ๋ฌธ์ž์—ด์˜ ์ดˆ๊ธฐ ๋ถ€๋ถ„์„ str์—์„œ int๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ˆซ์ž๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ž๊ฐ€ ๋‚˜์˜ค๊ธฐ ์ „๊นŒ์ง€ ๊ณต๋ฐฑ ๋ฌธ์ž๋“ค์„ ๋ชจ๋‘ ๋ฌด์‹œํ•œ๋‹ค. ๊ณต๋ฐฑ ๋ฌธ์ž๋ฅผ ๋ฌด์‹œํ•œ ํ›„, ์ฃผ์–ด์ง€๋Š” ๋ฌธ์ž๋“ค์ด ๋ถ€ํ˜ธ ํ˜น์€ ์ˆซ์ž๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ๋ณ€ํ™˜์ด ์ด๋ค„์ง€์ง€ ์•Š๋Š”๋‹ค. ๋˜ํ•œ ๋ฌธ์ž์—ด์ด ๊ณต๋ฐฑ ๋ฌธ์ž๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ์–ด๋„ ๋ณ€ํ™˜์ด ์ด๋ฃจ์–ด ์ง€์ง€ ์•Š๋Š”๋‹ค. ๋ณ€ํ™˜์— ์ˆซ์ž๋ฅผ ์ด์šฉํ•˜๊ณ , ๋” ์ด์ƒ ์ˆซ์ž๊ฐ€ ๋‚˜์˜ค์ง€ ์•Š๋Š”๋‹ค๋ฉด ๋ณ€ํ™˜์„ ๋งˆ์น˜๊ฒŒ ๋œ๋‹ค.

Return Value

๋ถ€ํ˜ธ๋ฅผ ์ฒ˜๋ฆฌํ•œ intํ˜• ์ •์ˆ˜๋ฅผ ๋ฐ˜ํ™˜

ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค

printf("%d", ft_atoi("22433723768547758107")); printf("%d", ft_atoi("9223372036854775808")); printf("%d", ft_atoi("9223372036854775808"));
C

17) isalpha

ํ•จ์ˆ˜ ์›ํ˜•

#include <ctype.h> int isalpha(int c);
C

ํ•จ์ˆ˜ ์„ค๋ช…

c๊ฐ€ ์•ŒํŒŒ๋ฒณ์ธ์ง€ ํŒ๋‹จํ•œ๋‹ค. ์ด ๋•Œ ๋งค๊ฐœ ๋ณ€์ˆ˜์˜ ์ž๋ฃŒํ˜•์ด char๊ฐ€ ์•„๋‹Œ int์ธ ์ด์œ ๋Š” EOF๋ฅผ ์ฒ˜๋ฆฌ ํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. char์€ -128์—์„œ 127๊นŒ์ง€์˜ ๋ฒ”์œ„๋ฅผ ๊ฐ–๊ณ  ์žˆ์œผ๋ฏ€๋กœ, ์ด 256๊ฐœ์˜ ํ‘œํ˜„์„ ํ•  ์ˆ˜ ์žˆ๋Š” ํƒ€์ž…์ด๋‹ค. ๋”ฐ๋ผ์„œ char๋ฅผ ๋ฐ›๊ฒŒ ๋˜๋ฉด ์ด 256๊ฐ€์ง€์˜ ๊ฒฝ์šฐ๋กœ ๋ฐ˜ํ™˜์„ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋Š”๋ฐ, ์ด์— ๋Œ€ํ•ด์„  ์•„์Šคํ‚ค ์ฝ”๋“œ ๋ฐ ํ™•์žฅ์— ๋Œ€ํ•ด์„œ๋งŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— EOF์— ๋Œ€ํ•ด์„œ๋Š” ์ฒ˜๋ฆฌ ๋ถˆ๊ฐ€ํ•˜๊ฒŒ ๋œ๋‹ค. ๊ฒฐ๊ตญ, 256๊ฐ€์ง€ (์•„์Šคํ‚ค ์ฝ”๋“œ ๋ฐ ํ™•์žฅ)์— ์ถ”๊ฐ€๋กœ 1๊ฐ€์ง€ (EOF)๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” int ํƒ€์ž…์ด ํ•„์š”ํ•˜๋‹ค.
EOF๋ž€ End Of File์˜ ์•ฝ์ž๋กœ ๋” ์ด์ƒ ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์Œ์„ ์ง€์นญํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ํŒŒ์ผ์˜ ๋์„ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋ฉฐ, ํŒŒ์ผ์˜ ๋์— ๋„๋‹ฌํ–ˆ์„ ๋•Œ ์–ธ์ œ๋‚˜ ํŠน๋ณ„ํ•œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ๋งŒ๋“ค์–ด์ ธ ์žˆ๋‹ค. (๋ณดํ†ต -1์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.)

Return Value

โ€ข
์•ŒํŒŒ๋ฒณ์ด ์•„๋‹ˆ๋ผ๋ฉด 0์„ ๋ฐ˜ํ™˜
โ€ข
์•ŒํŒŒ๋ฒณ์ด๋ผ๋ฉด 0์ด ์•„๋‹Œ ์ •์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ (์ด๋Š” Implementation Defined Behavior์ด๋‹ค. ๋”ฐ๋ผ์„œ ๋Œ€๋ฌธ์ž์ธ ๊ฒฝ์šฐ 1์„ ๋ฐ˜ํ™˜ํ•˜๊ณ , ์†Œ๋ฌธ์ž์ธ ๊ฒฝ์šฐ 2๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ์‹์œผ๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค. ์ด๋ฅผ ํ†ตํ•ด c๊ฐ€ ์†Œ๋ฌธ์ž์ธ์ง€ ๋Œ€๋ฌธ์ž์ธ์ง€ ํ•œ๋ฒˆ์— ํŒŒ์•…ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๊ธฐ๋„ ํ•˜๋‹ค.)

18) isdigit

ํ•จ์ˆ˜ ์›ํ˜•

#include <ctype.h> int isdigit(int c);
C

ํ•จ์ˆ˜ ์„ค๋ช…

๋งค๊ฐœ ๋ณ€์ˆ˜ c์— ๋“ค์–ด์˜ค๋Š” ๊ฐ’์ด ์ˆซ์ž๋ฅผ ์ง€์นญํ•˜๋Š” ๋ฌธ์ž์ธ์ง€ ํŒ๋‹จํ•œ๋‹ค.

Return Value

โ€ข
์ˆซ์ž๋ฅผ ์ง€์นญํ•˜๋Š” ๋ฌธ์ž๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด 0์„ ๋ฐ˜ํ™˜
โ€ข
์ˆซ์ž๋ฅผ ์ง€์นญํ•˜๋Š” ๋ฌธ์ž๋ผ๋ฉด 1์„ ๋ฐ˜ํ™˜

19) isalnum

ํ•จ์ˆ˜ ์›ํ˜•

#include <ctype.h> int isalnum(int c);
C

ํ•จ์ˆ˜ ์„ค๋ช…

c๊ฐ€ ์•ŒํŒŒ๋ฒณ ๋˜๋Š” ์ˆซ์ž์ธ์ง€ ํ™•์ธํ•œ๋‹ค.

Return Value

โ€ข
์•ŒํŒŒ๋ฒณ ๋˜๋Š” ์ˆซ์ž์ด๋ฉด 0์ด ์•„๋‹Œ ๊ฐ’์„ ๋ฐ˜ํ™˜
โ€ข
๋‘˜ ๋‹ค ํ•ด๋‹นํ•˜์ง€ ์•Š์œผ๋ฉด 0 ๋ฐ˜ํ™˜

ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค

#include <ctype.h> #include <stdio.h> int main(void) { printf("%d\n", isalnum('a')); printf("%d\n", isalnum('!')); printf("%d\n", isalnum('1')); printf("%d\n", isalnum(1)); printf("%d\n", isalnum(49)); return (0); }
C
1 0 1 0 1
C++

20) isascii

ํ•จ์ˆ˜ ์›ํ˜•

#include <ctype.h> int isascii(int c);
C

ํ•จ์ˆ˜ ์„ค๋ช…

c๊ฐ€ 0 ~ 127 ์‚ฌ์ด ๊ฐ’์ธ ์•„์Šคํ‚ค ๋ฌธ์ž์ธ์ง€ ํ™•์ธํ•œ๋‹ค.

Return Value

โ€ข
์•„์Šคํ‚ค ๋ฌธ์ž๋ผ๋ฉด 0์ด ์•„๋‹Œ ๊ฐ’์„ ๋ฐ˜ํ™˜
โ€ข
์•„์Šคํ‚ค ๋ฌธ์ž๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด 0์„ ๋ฐ˜ํ™˜

ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค

#include <ctype.h> #include <stdio.h> int main(void) { printf("%d\n", isascii('a')); printf("%d\n", isascii('!')); printf("%d\n", isascii('1')); printf("%d\n", isascii(0)); printf("%d\n", isascii(49)); printf("%d\n", isascii(128)); return (0); }
C
1 1 1 1 1 0
C

21) isprint

ํ•จ์ˆ˜ ์›ํ˜•

#include <ctype.h> int isprint(int c);
C

ํ•จ์ˆ˜ ์„ค๋ช…

c๊ฐ€ ๊ณต๋ฐฑ์„ ํฌํ•จํ•˜์—ฌ ์ถœ๋ ฅ ๊ฐ€๋Šฅํ•œ ๋ฌธ์ž์ธ์ง€ ํ™•์ธํ•œ๋‹ค. 32 ~ 126 ์‚ฌ์ด์˜ ๊ฐ’์„ ๋งํ•œ๋‹ค.

Return Value

โ€ข
์ถœ๋ ฅ ๊ฐ€๋Šฅํ•œ ๋ฌธ์ž์ด๋ฉด 0์ด ์•„๋‹Œ ์ •์ˆ˜๋ฅผ ๋ฐ˜ํ™˜
โ€ข
๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด 0์„ ๋ฐ˜ํ™˜

ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค

#include <ctype.h> #include <stdio.h> int main(void) { printf("%d\n", isprint('a')); printf("%d\n", isprint('!')); printf("%d\n", isprint('1')); printf("%d\n", isprint(0)); printf("%d\n", isprint(49)); printf("%d\n", isprint(128)); printf("%d\n", isprint(127)); printf("%d\n", isprint(32)); return (0); }
C++
1 1 1 0 1 0 0 1
C

22) toupper

ํ•จ์ˆ˜ ์›ํ˜•

#include <ctype.h> int toupper(int c);
C

ํ•จ์ˆ˜ ์„ค๋ช…

c๋กœ ๋“ค์–ด์˜จ ๊ฐ’์ด ์†Œ๋ฌธ์ž์— ํ•ด๋‹นํ•œ๋‹ค๋ฉด ์ด๋ฅผ ๋Œ€๋ฌธ์ž๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค. ์ด ๋•Œ ๋งค๊ฐœ ๋ณ€์ˆ˜์˜ ์ž๋ฃŒํ˜•์ด char๊ฐ€ ์•„๋‹Œ int์ธ ์ด์œ ๋Š” EOF๋ฅผ ์ฒ˜๋ฆฌ ํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. char์€ -128์—์„œ 127๊นŒ์ง€์˜ ๋ฒ”์œ„๋ฅผ ๊ฐ–๊ณ  ์žˆ์œผ๋ฏ€๋กœ, ์ด 256๊ฐœ์˜ ํ‘œํ˜„์„ ํ•  ์ˆ˜ ์žˆ๋Š” ํƒ€์ž…์ด๋‹ค. ๋”ฐ๋ผ์„œ char๋ฅผ ๋ฐ›๊ฒŒ ๋˜๋ฉด ์ด 256๊ฐ€์ง€์˜ ๊ฒฝ์šฐ๋กœ ๋ฐ˜ํ™˜์„ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋Š”๋ฐ, ์ด์— ๋Œ€ํ•ด์„  ์•„์Šคํ‚ค ์ฝ”๋“œ ๋ฐ ํ™•์žฅ์— ๋Œ€ํ•ด์„œ๋งŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— EOF์— ๋Œ€ํ•ด์„œ๋Š” ์ฒ˜๋ฆฌ ๋ถˆ๊ฐ€ํ•˜๊ฒŒ ๋œ๋‹ค. ๊ฒฐ๊ตญ, 256๊ฐ€์ง€ (์•„์Šคํ‚ค ์ฝ”๋“œ ๋ฐ ํ™•์žฅ)์— ์ถ”๊ฐ€๋กœ 1๊ฐ€์ง€ (EOF)๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” int ํƒ€์ž…์ด ํ•„์š”ํ•˜๋‹ค.
EOF๋ž€ End Of File์˜ ์•ฝ์ž๋กœ ๋” ์ด์ƒ ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์Œ์„ ์ง€์นญํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ํŒŒ์ผ์˜ ๋์„ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋ฉฐ, ํŒŒ์ผ์˜ ๋์— ๋„๋‹ฌํ–ˆ์„ ๋•Œ ์–ธ์ œ๋‚˜ ํŠน๋ณ„ํ•œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ๋งŒ๋“ค์–ด์ ธ ์žˆ๋‹ค. (๋ณดํ†ต -1์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.)

Return Value

โ€ข
์†Œ๋ฌธ์ž์— ๋Œ€์‘ํ•˜๋Š” ๋Œ€๋ฌธ์ž
โ€ข
์†Œ๋ฌธ์ž์— ๋Œ€์‘ํ•˜๋Š” ๋Œ€๋ฌธ์ž๊ฐ€ ์—†์œผ๋ฉด, ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ๊ทธ๋Œ€๋กœ ๋ฐ˜ํ™˜

23) tolower

ํ•จ์ˆ˜ ์›ํ˜•

#include <ctype.h> int tolower(int c);
C

ํ•จ์ˆ˜ ์„ค๋ช…

c๋กœ ๋“ค์–ด์˜จ ๊ฐ’์ด ๋Œ€๋ฌธ์ž์— ํ•ด๋‹นํ•œ๋‹ค๋ฉด ์ด๋ฅผ ์†Œ๋ฌธ์ž๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค. ์ด ๋•Œ ๋งค๊ฐœ ๋ณ€์ˆ˜์˜ ์ž๋ฃŒํ˜•์ด char๊ฐ€ ์•„๋‹Œ int์ธ ์ด์œ ๋Š” EOF๋ฅผ ์ฒ˜๋ฆฌ ํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. char์€ -128์—์„œ 127๊นŒ์ง€์˜ ๋ฒ”์œ„๋ฅผ ๊ฐ–๊ณ  ์žˆ์œผ๋ฏ€๋กœ, ์ด 256๊ฐœ์˜ ํ‘œํ˜„์„ ํ•  ์ˆ˜ ์žˆ๋Š” ํƒ€์ž…์ด๋‹ค. ๋”ฐ๋ผ์„œ char๋ฅผ ๋ฐ›๊ฒŒ ๋˜๋ฉด ์ด 256๊ฐ€์ง€์˜ ๊ฒฝ์šฐ๋กœ ๋ฐ˜ํ™˜์„ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋Š”๋ฐ, ์ด์— ๋Œ€ํ•ด์„  ์•„์Šคํ‚ค ์ฝ”๋“œ ๋ฐ ํ™•์žฅ์— ๋Œ€ํ•ด์„œ๋งŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— EOF์— ๋Œ€ํ•ด์„œ๋Š” ์ฒ˜๋ฆฌ ๋ถˆ๊ฐ€ํ•˜๊ฒŒ ๋œ๋‹ค. ๊ฒฐ๊ตญ, 256๊ฐ€์ง€ (์•„์Šคํ‚ค ์ฝ”๋“œ ๋ฐ ํ™•์žฅ)์— ์ถ”๊ฐ€๋กœ 1๊ฐ€์ง€ (EOF)๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” int ํƒ€์ž…์ด ํ•„์š”ํ•˜๋‹ค.
EOF๋ž€ End Of File์˜ ์•ฝ์ž๋กœ ๋” ์ด์ƒ ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์Œ์„ ์ง€์นญํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ํŒŒ์ผ์˜ ๋์„ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋ฉฐ, ํŒŒ์ผ์˜ ๋์— ๋„๋‹ฌํ–ˆ์„ ๋•Œ ์–ธ์ œ๋‚˜ ํŠน๋ณ„ํ•œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ๋งŒ๋“ค์–ด์ ธ ์žˆ๋‹ค. (๋ณดํ†ต -1์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.)

Return Value

โ€ข
๋Œ€๋ฌธ์ž์— ๋Œ€์‘ํ•˜๋Š” ์†Œ๋ฌธ์ž
โ€ข
๋Œ€๋ฌธ์ž์— ๋Œ€์‘ํ•˜๋Š” ์†Œ๋ฌธ์ž๊ฐ€ ์—†์œผ๋ฉด, ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ๊ทธ๋Œ€๋กœ ๋ฐ˜ํ™˜

3. libft.h

/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* libft.h :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: jseo <jseo@student.42seoul.kr> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/12/22 15:13:53 by jseo #+# #+# */ /* Updated: 2020/12/25 20:20:54 by jseo ### ########.fr */ /* */ /* ************************************************************************** */ #ifndef LIBFT_H # define LIBFT_H # include <stdlib.h> # include <unistd.h> typedef struct s_list { void *content; struct s_list *next; } t_list; int ft_atoi(const char *s); void ft_bzero(void *s, size_t n); void *ft_calloc(size_t cnt, size_t n); int ft_isalnum(int c); int ft_isalpha(int c); int ft_isascii(int c); int ft_isdigit(int c); int ft_isprint(int c); char *ft_itoa(int n); void *ft_memccpy(void *dst, const void *src, int c, size_t n); void *ft_memchr(const void *s, int c, size_t n); int ft_memcmp(const void *s1, const void *s2, size_t n); void *ft_memcpy(void *dst, const void *src, size_t n); void *ft_memmove(void *dst, const void *src, size_t n); void *ft_memset(void *s, int c, size_t n); void ft_putchar_fd(char c, int fd); void ft_putendl_fd(char *s, int fd); void ft_putnbr_fd(int n, int fd); void ft_putstr_fd(char *s, int fd); char **ft_split(char const *s, char c); char *ft_strchr(const char *s, int c); char *ft_strdup(const char *s); char *ft_strjoin(char const *s1, char const *s2); size_t ft_strlcat(char *dst, const char *src, size_t dstsize); size_t ft_strlcpy(char *dst, const char *src, size_t dstsize); size_t ft_strlen(const char *s); char *ft_strmapi(char const *s, char (*f)(unsigned int, char)); int ft_strncmp(const char *s1, const char *s, size_t n); char *ft_strnstr(const char *s1, const char *set, size_t n); char *ft_strrchr(const char *s, int c); char *ft_strtrim(char const *s1, char const *set); char *ft_substr(char const *s, unsigned int start, size_t len); int tolower(int c); int toupper(int c); int ft_lstsize(t_list *lst); void ft_lstadd_back(t_list **lst, t_list *new); void ft_lstadd_front(t_list **lst, t_list *new); void ft_lstclear(t_list **lst, void (*del)(void *)); void ft_lstdelone(t_list *lst, void (*del)(void *)); void ft_lstiter(t_list *lst, void (*f)(void *)); t_list *ft_lstlast(t_list *lst); t_list *ft_lstmap(t_list *lst, void *(*f)(void *), void (*del)(void *)); t_list *ft_lstnew(void *content); #endif
C

4. Makefile

# **************************************************************************** # # # # ::: :::::::: # # Makefile :+: :+: :+: # # +:+ +:+ +:+ # # By: jseo <jseo@student.42seoul.kr> +#+ +:+ +#+ # # +#+#+#+#+#+ +#+ # # Created: 2020/12/22 14:44:25 by jseo #+# #+# # # Updated: 2021/01/01 00:47:04 by jseo ### ########.fr # # # # **************************************************************************** # NAME = libft.a SRCS = ft_atoi.c \ ft_bzero.c \ ft_calloc.c \ ft_isalnum.c \ ft_isalpha.c \ ft_isascii.c \ ft_isdigit.c \ ft_isprint.c \ ft_itoa.c \ ft_memccpy.c \ ft_memchr.c \ ft_memcmp.c \ ft_memcpy.c \ ft_memmove.c \ ft_memset.c \ ft_putchar_fd.c \ ft_putendl_fd.c \ ft_putnbr_fd.c \ ft_putstr_fd.c \ ft_split.c \ ft_strchr.c \ ft_strdup.c \ ft_strjoin.c \ ft_strlcat.c \ ft_strlcpy.c \ ft_strlen.c \ ft_strmapi.c \ ft_strncmp.c \ ft_strnstr.c \ ft_strrchr.c \ ft_strtrim.c \ ft_substr.c \ ft_tolower.c \ ft_toupper.c BNS_SRCS = ft_lstsize.c \ ft_lstadd_back.c \ ft_lstadd_front.c \ ft_lstclear.c \ ft_lstdelone.c \ ft_lstiter.c \ ft_lstlast.c \ ft_lstmap.c \ ft_lstnew.c OBJS = $(SRCS:%.c=%.o) BNS_OBJS = $(BNS_SRCS:%.c=%.o) FLAGS = -Wall -Wextra -Werror $(NAME) : $(OBJS) gcc $(FLAGS) -c $(SRCS) -I./ ar rc $(NAME) $(OBJS) all : $(NAME) bonus : $(NAME) gcc $(FLAGS) -c $(BNS_SRCS) -I./ ar rc $(NAME) $(BNS_OBJS) clean : rm -f $(OBJS) $(BNS_OBJS) fclean : clean rm -f $(NAME) re : fclean all .PHONY : all clean fclean re
Plain Text

5. Code of Jseo