[42-Seoul/Libft] Part1 정리

yebeen·2022년 4월 7일
0

42-Seoul/Libft

목록 보기
1/3
post-thumbnail

Libft Part1


info

  • isalpha, isdigit, isalnum, isascii, isprint
  • bzero, memset, memcpy, memmove, memchr, memcmp
  • strlen, strnstr, strlcpy, strlcat, strchr, strrchr, strncmp
  • toupper, tolower, atoi, calloc, strdup

Part1

  • isalpha :
int ft_isalpha(int c);
```c
입력 c가 알파벳이면 참, 아니면 거짓을 반환해주는 함수
(대문자 1, 소문자 2, 알파벳 아닐경우 0을 반환)
<br>
  • isdigit :
int ft_isdigit(int c);

: 입력 c가 숫자이면 참, 아니면 거짓을 반환해주는 함수

  • isalnum :
int	ft_isalnum(int c);

입력 c가 알파벳이거나 숫자이면 참, 아니면 거짓을 반환해주는 함수
(대문자 1, 소문자 2, 숫자 4, 알파벳이나 숫자가 아닐 경우 0을 반환)

  • isascii :
int	ft_isascii(int c);

입력 c가 아스키코드 범위 내의 값이면 참, 아니면 거짓을 반환해주는 함수

  • isprint :
int	ft_isprint(int c);

입력 c가 출력 가능한 문자이면 참, 아니면 거짓을 반환해주는 함수
(32(' ') - 126('~')까지 출력가능, 127(Delete))

  • bzero :
void ft_bzero(void *s, size_t n)

s를 n크기만큼 0으로 초기화하는 함수이다. memset을 사용한다.
이때, size_t는 이론상 가장 큰 사이즈의 unsinged데이터 타입이다.

  • memset
void *ft_memset(void *ptr, int value, size_t len)

ptr가 가리키는 메모리 주소부터 len바이트만큼 value값을 채운다.
이때, int로 받은 value는 함수 내부에서 unsigned char로 자동 변경된다.

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

src가 가리키는 메모리 주소로부터 n바이트 길이만큼 dst메모리에 복사한다.
널 종료 문자를 검사하지 않는 것이 strcpy()함수와의 차이점이라고 할 수 있다.
만약 두 메모리 블록이 겹쳐있다면 memmove함수를 이용해야한다.

  • memmove
void *ft_memmove(void *dest, const void *src, size_t n)

src배열은 src와 dest메모리 영역과 겹치지 않는 메모리 영역부터 먼저 복사한다.
dst < src의 경우 memcpy와 동일하다
dst > src의 경우 src 마지막 바이트 부터 dest+len에 복사한다.

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

s주소에 접근하여 n만큼 탐색하여 c 값을 찾는다. 이때 c값을 찾으면 그 주소를 반환하고 찾지 못하면 null을 반환한다.

  • memcmp
int ft_memcmp(const void *b1, const void *b2, size_t n)

s1과 s2를 n바이트만큼 비교한다. 두 포인터가 모두 0이거나 비교하는 길이가 0이면 0을 반환한다.
값이 다르면 그 값의 차이를 반환하고 같으면 0을 반환한다.
strcmp와 같은 논리이나 unsigned char * 형을 사용한다는 차이가 있다.

  • strlen
size_t strlen(const char *str)

문자열의 길이를 구하는 함수이다.

  • strnstr
char *ft_strnstr(const char *haystack, const char *needle, size_t len)

문자열 내부에서 부분 문자열을 탐색하는 함수이다.
포함되어있을경우 포함되는 문자가 시작하는 부분의 위치 주소를 반환한다.
needle 문자열의 값이 비어져있으면 haystack의 첫번째 주소 값을 반환한다. needle문자열을 찾지못하면 null값을 반환한다.

  • strlcpy
size_t ft_strlcpy(char *dst, const char *src, size_t dstsize)

null을 보장하면서 문자열을 복사하는 함수이다. src의 길이를 반환한다.

  • strlcat
size_t ft_strlcat(char *dest, const char *src, size_t dstsize)

null을 보장하여 문자열을 이어 붙인다. size-1만큼 dst 뒤에 src를 이어 붙이며 size의 크기에 따라 반환하는 값이 나뉜다.
size가 dest 보다 크다면, len(dest) + len(src)길이를 반환한다.
size가 dest 보다 작다면, size _ len(src) 길이를 반환한다.

  • strchr
char *ft_strchr(const char *s, int c)

문자열에서 특정 문자로 검색한다. 해당 문자로 싲가하는 문자열의 주소의 값을 반환하고 없으면 NULL을 반한다. 이때, NULL문자도 비교가능하도록 예외처리를 해줘야한다.

  • strrchr
char *ft_strrchr(const char *s, int c)

문자열에서 특정 문자를 검색하여 가장 마지막으로 나타난 위치를 검색한다. 해당 문자로 끝나는 문자열의 주소의 값을 반환하고, 없으면 NULL을 반환한다. 이때, NULL문자도 비교 가능하도록 예외 처리해줘야 한다.

  • strncmp
int ft_strncmp(const char *s1, const char *s2, size_t n)

두 문자열의 내용을 비교한다. 비교는 처음부터 n바이트가지 혹은 일치하지 않거나 NULL문자를 만났을 때 까지로 한다.
일지하지 않은 문자가 발생한 경우, 두 문자를 뺀 값을 반환한다.
(ex s1> s2 = (+)양수 값 반환, s1 < s2 = (-)음수 값 반환)
strcmp와 같은 방식이나 다른 문자가 나타나거나 NULL을 만나면 종료하고 값을 반환한다는 차이가 있다.

  • toupper
int		ft_toupper(int c)

소문자를 대문자로 변환하는 함수이다.

  • tolower
int		ft_tolower(int c)

대문자를 소문자로 변환하는 함수이다.

atoi

int	ft_atoi(const char *str);

문자열 정수를 int형 정수로 변환하는 함수이다.
공백을 제외하고 부호문자를 처리한 후 숫자로 처리한다.
숫자가 아닌 다른 문자가 나오면 멈추고 이전까지 계산한 수를 반환한다.
오버플로우값이 들어오면 -1, 언더플로우의 경우0을 리턴한다. 하지만 이는 strtol함수의 결과값 처리 과정에서 생긴 오류이며 결과적으로 오버플로우와 언더플로우의 경우 libft에서 신경쓰지 않아도 되는 부분이라고 한다.

  • calloc
void *ft_calloc(size_t count, size_t size)

size * count 크기의 메모리 공간을 확보한 후 0으로 초기화하는 함수이다.
malloc과 달리 calloc은 할당된 공간의 값을 모두 0으로 초기화한다는 차이가있다. 배열을 할당하고 모두 0으로 초기화해야할 필요가 있는경우 쓸 수 있다.

  • strdup
char *ft_strdup(const char *s1)

문자 s1을 복사하고 복사된 문자열을 가리키는 포인터를 반환한다.


Libft Part1 자세한 내용 블로그 확인

! unsigned char형을 사용하는 이유
1. unsigned char는 모든 bit를 투명하게 볼 수 있는 특성을 제공한다.
2. 임의의 메모리에 바이트 단위로 접근해 값을 다룰 대에는 반드시 unsigned char를 사용해야 full protability를 얻을 수 있다.
3. 또한 signed char가 표현할 수 있는 값의 개수보다 unsigned char가 표현할 수 있는 값의 개수가 많다.
4. 표준이 바이트 값에 접근해야 하는 경우나 문자에 접근해야 하는 경우에는 모두 unsigned char로 접근하도록 요구하고 있다.(mem(), str() 함수들)

profile
🐣🐥

0개의 댓글