42Seoul/libft

libft - strnstr, atoi, calloc

재윤 2023. 3. 24. 13:16
반응형

strntr

함수 원형

char	*ft_strnstr(const char *str, const char *substr, size_t len)
  1. str에서 substr을 찾을 것임. 단, len만큼 찾을 것임
  2. 똑같은 값을 찾더라도 len이 충족되지 않으면 (NULL)리턴
  3. substr에 아무것도 없으면 str리턴
  4. 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 함수

 

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

 

[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은 어떤 함수일까??

 

[42seoul] strnstr은 어떤 함수일까??

libft과제 중 strnstr에 대해 정리해 봤다.

velog.io

 

atoi

함수 원형

int	atoi(const char *string);

atoi는 입력 str을 int형 숫자로 바꿔주는 친구이다. 10진수로 바꿔야함.

조건

  1. 부호가 여러개 있으면 안 됨.
  2. 숫자 전에 앞에 검사 할 때 공백 문자 말고도 개행 문자 등 다른 것들도 해주어야함.
#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() — 문자 스트링을 정수로 변환

 

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)
  1. 자료형의 size로 count만큼 메모리 공간 할당
  2. 할당된 메모리 공간은 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

 

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