strntr
함수 원형
char *ft_strnstr(const char *str, const char *substr, size_t len)
- str에서 substr을 찾을 것임. 단, len만큼 찾을 것임
- 똑같은 값을 찾더라도 len이 충족되지 않으면 (NULL)리턴
- substr에 아무것도 없으면 str리턴
- substr, str에 아무것도 없으면 str리턴
#include "libft.h"
char *ft_strnstr(const char *str, const char *substr, size_t len)
{
char *s1;
char *s2;
size_t count;
if (*substr == 0 && *str == 0)
return ((char *)str);
if (*substr == 0)
return ((char *)str);
while (*str && len != 0)
{
s1 = (char *)str;
s2 = (char *)substr;
count = len;
while (*s1 && *s2 && (*s1 - *s2 == 0) && count != 0)
{
s1++;
s2++;
count--;
}
if (!*s2)
return ((char *)str);
str++;
len--;
}
return (0);
}
#include <stdio.h>
int main()
{
char *haystack = "123456123";
char * needle = "";
printf("return = %s", ft_strnstr(haystack, needle, 20));
}
참고 사이트
strnstr 함수
#include char *strnstr(const char *big, const char *little, size_t len); 이 함수는 big 문자열에 len 길이 중에서 little 문자열을 찾는 것이다. 반환 값 만약 little 값이 비어 있으면 big를 반환한다. big 문자열에서 lit
whatdocumentary.tistory.com
[C]strstr & strnstr
strstr함수는 문자열을 찾는 함수입니다. strnstr함수는 정해진 길이안에서 문자열을 찾는 함수입니다. 1️⃣ 함수원형 < strstr > char *strstr(const char *str, const char *substr) < strlcat > char *strnstr(const char *str
kirkim.github.io
[42seoul] strnstr은 어떤 함수일까??
libft과제 중 strnstr에 대해 정리해 봤다.
velog.io
atoi
함수 원형
int atoi(const char *string);
atoi는 입력 str을 int형 숫자로 바꿔주는 친구이다. 10진수로 바꿔야함.
조건
- 부호가 여러개 있으면 안 됨.
- 숫자 전에 앞에 검사 할 때 공백 문자 말고도 개행 문자 등 다른 것들도 해주어야함.
#include "libft.h"
int ft_atoi(const char *string)
{
int i;
long sr;
long result;
result = 0;
sr = 1;
i = 0;
while (string[i] != '\\0' && ((string[i] >= 9 && string[i] <= 13)
|| string[i] == 32))
i++;
if (string[i] == '-')
{
sr *= -1;
i++;
}
else if (string[i] == '+')
i++;
while (string[i] != '\\0' && (string[i] >= '0' && string[i] <= '9'))
{
result = result * 10 + (string[i] - '0');
i++;
}
return ((int)(result * sr));
}
#include <stdio.h>
#include <stdlib.h>
int main()
{
char *haystack = " --123456123";
char * needle = " --1234";
printf("return = %d\\n", ft_atoi(haystack));
printf("return = %d", atoi(needle));
}
다른 중요한 조건!!!
atoi는 (int)strtol(str, (char **)NULL, 10); 한 것과 값이 간다고 한다. 즉, atoi 함수 안에서 연산을 할 때는 long으로 연산을 한 뒤 리턴할 때 int형으로 리턴해주면 된다.
int형이 넘어가는 범위는 이상한 값이 나올 것인데 이 행동을 undefined behavior의 원인이 되어인다고 적혀있다. 즉 사용자가 잘 처리해야 되는 부분이다.
참고 사이트
atoi() — 문자 스트링을 정수로 변환
형식 #include int atoi(const char *string); 로케일 감지 이 함수의 작동은 현재 로케일의 LC_CTYPE 범주에 영향을 받을 수 있습니다. 자세한 정보는 CCSID 및 로케일 이해의 내용을 참조하십시오. 설명 atoi()
www.ibm.com
c언어 atoi, atol 함수 - 문자열 정수 변환하기
c언어 atoi, atol 함수 - 문자열 정수 변환하기
문자열을 숫자로, 혹은 그 반대로 변환해야 하는 경우가 있습니다. 물론, ps에서는 매우 간단하게 ss...
blog.naver.com
calloc
void *ft_calloc(size_t count, size_t size)
- 자료형의 size로 count만큼 메모리 공간 할당
- 할당된 메모리 공간은 0으로 초기화
구현
malloc, memset 이용
#include "libft.h"
void *ft_calloc(size_t count, size_t size)
{
void *temp;
temp = malloc(size * count);
if (temp == 0)
return (0);
ft_memset(temp, 0, size * count);
return (temp);
참고 사이트
ft_calloc
malloc과 달리 할당된 공간의 값을 모두 0으로 바꾼다.size크기의 변수를 count개 만큼 저장할 수 있는 메모리 공간을 할당.할당된 메모리 공간을 0으로 초기화malloc : 메모리를 동적으로 할당하는 함
velog.io
'42Seoul > libft' 카테고리의 다른 글
libft - strjoin, itoa, strmapi (0) | 2023.03.24 |
---|---|
libft - strdup, strlen, substr (0) | 2023.03.24 |
libft - strrchr, memchr, memcmp (2) | 2023.03.24 |
libft - toupper, tolower, strchr (0) | 2023.03.24 |
libft - strlcpy, strlcat, strncmo (0) | 2023.03.24 |