libft/42

Libft part1 (2/1)

dev.tkim42 2021. 2. 9. 06:05

1. memset

함수이름

- ft_memset

 

프로토타입

- void *ft_memset(void *dest, int value, size_t num)

 

매개변수

-void *dest : 채우고자 하는 메모리의 시작 주소

-int value : 메모리에 담을 값 ( int 형이지만 함수 내부적으로 unsigned char(1byte)로 변환되어서 저장됨

-size_t num : 채우고자하는 바이트 담을 개수

 

리턴값

- void *dest

 

설명

- num바이트 메모리 크기만큼 value값을 메모리 dest에 채움

주로 메모리 초기화를 목적으로 사용된다.

void	*ft_memset(void *dest, int value, size_t num)
{
	size_t i;

	i = 0;
	while (i < num)
	{
		*((unsigned char *)dest + i) = (unsigned char)value;
		i++;
	}
	return (dest);
}



2. bzero

함수이름

- ft_bzero

 

프로토타입

- void *ft_bzero(void *str, size_t num)

 

매개변수

-void *str : 채우고자 하는 메모리의 시작 주소

- size_t num : 채우고자하는 바이트 개수

 

리턴값

- void

 

설명

- str의 위치부터 num개의 바이트만큼 0으로 초기화 해주는 함수이다.

void	ft_bzero(void *str, size_t num)
{
	unsigned char	*dest;
	size_t			i;

	dest = str;
	i = 0;
	while (i++ < num)
		*dest++ = 0;
}

 

3. memcpy

함수이름

- ft_memcpy

 

프로토타입

- void *ft_memcpy(void *dest, const void *src, size_t cnt)

 

매개변수

-void *dest : 복사가 되는 메모리 시작 주소

-const void *src : 복사할 메모리 시작주소 값

-size_t cnt : 메모리 담을 바이트 개수

 

리턴값

- void *dest

 

설명

- src의 위체에서 cnt개의 바이트 만큼 dest에 복사한다. 

이 함수는 null 종료문자를 검사하지 않고 size_t cnt 만큼만 복사한다.

그리고 dest와 src의 주소 값이 겹치지 않도록 주의해야한다. (두 주소가 겹칠경우 memmove 함수를 사용하자)

#include "libft.h"

void	*ft_memcpy(void *dest, const void *src, size_t cnt)
{
	char		*temp;
	const char	*s;
	size_t		i;

	if (!dest && !src)
		return (NULL);
	temp = dest;
	s = src;
	i = 0;
	while (i < cnt)
	{
		temp[i] = s[i];
		i++;
	}
	return (temp);
}

 

4. memccpy

함수이름

- ft_memccpy

 

프로토타입

- void *ft_memccpy(void *dest, const void *src, int c, size_t n)

 

매개변수

-void *dest : 복사가 되는 메모리 시작 주소

-const void *src : 복사할 메모리 시작주소

-int c :  src데이터에서 c를 만나면 복사를 중단할 값(내부적으로 unsigned char 형변환)

-size_n : 복사할 바이트 개수

 

리턴값

- void *dest or NULL

 

설명

- c문자를 찾을때 까지 src문자열을 dest에 복사한다. 도중에 문자 c를 찾으면 dest의 c와 일치하는 다음 주소값을 반환하고

src의 값에서 n만큼 복사하는 도중 문자 c를 찾지 못하면 NULL값을 반환한다.

#include "libft.h"

void	*ft_memccpy(void *dest, const void *src, int c, size_t n)
{
	size_t				i;
	unsigned char		*t_dest;
	const unsigned char	*t_src;

	i = 0;
	t_dest = dest;
	t_src = src;
	if (!dest && !n)
		return (NULL);
	while (i < n)
	{
		t_dest[i] = t_src[i];
		if (t_src[i] == (unsigned char)c)
			return (&dest[i + 1]);
		++i;
	}
	return (NULL);
}

 

5. memmove

함수이름

- ft_memmove

 

프로토타입

void *ft_memmove(void *dest, const void *src, size_t num)

 

매개변수

-void *dest : 채우려는 메모리 시작 주소

-const void *src : 복사할 메모리의 시작주소 ( int 형이지만 함수 내부적으로 unsigned char(1byte)로 변환되어서 저장됨

-size_t num : 메모리 담을 바이트 개수

 

리턴값

- void *dest

 

설명

- 문자열 src를 num개의 바이트만큼 dest로 복사하는 함수

memcpy와 기능은 비슷하지만 memmove함수에서는 src와 dest의 메모리 영역이 겹치지 않는다. (겹치지 않는 메모리부터 먼저 복사하기때문)

#include "libft.h"

void	*ft_memmove(void *dest, const void *src, size_t num)
{
	unsigned char		*temp;
	const unsigned char	*s;
	size_t				i;

	if (dest == src || num == 0)
		return (dest);
	temp = dest;
	s = src;
	i = 0;
	if (dest < src)
		while (i < num)
		{
			temp[i] = s[i];
			i++;
		}
	else
		while (i < num)
		{
			temp[num - i - 1] = s[num - i - 1];
			i++;
		}
	return (temp);
}

6. memchr

함수이름

- ft_memchr

 

프로토타입

- void *ft_memchr(const void *ptr, int ch, size_t cnt)

 

매개변수

-const void *ptr, : 검색할 메모리 시작주소

-int ch : 찾을 문자 ( int 형이지만 함수 내부적으로 unsigned char(1byte)로 변환되어서 저장됨

-size_t cnt : 검색을 수행할 바이트 수

 

리턴값

- 문자를 찾은 위치 리턴, 값을 찾지 못하면 NULL

 

설명

- 메모리블록에서 문자를 찾는다.

#include "libft.h"

void	*ft_memchr(const void *ptr, int ch, size_t cnt)
{
	size_t			i;
	unsigned char	c;
	unsigned char	*s;

	i = 0;
	c = (unsigned char)ch;
	s = (unsigned char*)ptr;
	while (i < cnt)
	{
		if (s[i] == c)
			return (s + i);
		i++;
	}
	return (NULL);
}

 

7. memcmp

함수이름

- ft_memcmp

 

프로토타입

- int ft_memcmp(const void *ptr1, const void *ptr2, size_t num)

 

매개변수

-const void *ptr1 :비교할 첫 번째 메모리 시작주소

-const void *ptr2 : 비교할 두 번째 메모리 시작주소

-size_t num : 비교할 바이트 개수

 

리턴값

- ptr1 > ptr2 : 양수

- ptr1 == ptr2 : 0

- ptr1 < ptr2  :음수

 

설명

- ptr1 과 ptr2 를 num 바이트만큼 비교한다.

#include "libft.h"

int		ft_memcmp(const void *ptr1, const void *ptr2, size_t num)
{
	unsigned char	*p1;
	unsigned char	*p2;
	size_t			i;

	p1 = (unsigned char *)ptr1;
	p2 = (unsigned char *)ptr2;
	i = 0;
	while (num--)
	{
		if (p1[i] != p2[i])
			return (p1[i] - p2[i]);
		i++;
	}
	return (0);
}

 

8. strlen

함수이름

- ft_strlen

 

프로토타입

- size_t ft_strlen(const char *s)

 

매개변수

-const char *s : 길이를 계산할 문자열

 

리턴값

- 문자열 길이

 

설명

- 문자열 s의 길이를 반환

#include "libft.h"

size_t	ft_strlen(const char *s)
{
	size_t len;

	len = 0;
	while (s[len] != '\0')
	{
		len++;
	}
	return (len);
}

 

9. strlcpy

함수이름

- ft_strlcpy

 

프로토타입

- size_t ft_strlcpy(char *dest, const char *src, size_t size)

 

매개변수

-char *dest : 복사될 메모리 시작 주소

-const char *src :  복사할 메모리 시작주소

-size_t size : 복사할 바이트 개수

 

리턴값

- size_t i : src의 총 길이

 

설명

- src에서 dest로 size만큼 길이를 복사한다

문자열 마지막에 NULL값으로 채워준다.

#include "libft.h"

size_t	ft_strlcpy(char *dest, const char *src, size_t size)
{
	size_t i;

	i = 0;
	if (size > 0)
	{
		while (src[i] && i + 1 < size)
		{
			dest[i] = src[i];
			++i;
		}
		dest[i] = 0;
	}
	while (src[i])
		++i;
	return (i);
}

 

10. strlcat

함수이름

- ft_strlcat

 

프로토타입

- size_t ft_strlcat(char *dest, char *src, size_t size)

 

매개변수

-char *dest : 복사될 메모리 시작 주소

-char *src : 붙이려는 메모리 시작주소

-size_t size : 복사할 바이트 개수

 

리턴값

- size < strlen(dest)  -> strlen(src) + size

- size > strlen(dest)  -> strlen(src) + strlen(dest)

 

설명

- 문자열 src를 dest 끝에 추가해주는 함수이다.

#include "libft.h"

size_t	ft_strlcat(char *dest, char *src, size_t size)
{
	size_t					dest_len;
	size_t					i;
	size_t					src_len;

	dest_len = ft_strlen(dest);
	src_len = ft_strlen(src);
	i = 0;
	if (size <= dest_len)
		return (src_len + size);
	while (*dest)
		dest++;
	while ((i + dest_len + 1 < size) && src[i])
	{
		dest[i] = src[i];
		i++;
	}
	dest[i] = '\0';
	return (dest_len + src_len);
}

 

11. strchr

함수이름

- ft_strchr

 

프로토타입

- char *ft_strchr(const char *s, int c)

 

매개변수

-const char *s : 대상 문자열

-int c : 검색할 문자

 

리턴값

- 해당 문자로 시작하는 문자열의 주소를 반환

 

설명

- 문자열 s 에서 문자 c를 검색하는 함수이다.

#include "libft.h"

char	*ft_strchr(const char *s, int c)
{
	while (*s != (char)c)
	{
		if (*s == '\0')
			return (NULL);
		s++;
	}
	return ((char *)s);
}

 

12. strrhr

함수이름

- ft_strrchr

 

프로토타입

- char *ft_strrchr(const char *s, int c)

 

매개변수

-const char *s : 대상 문자열

-int c : 검색할 문자

 

리턴값

- 문자열 s에 검색할 문자 c가 존재한다면 c의 주소값을 문자 c가 없다면 NULL을 반환

 

설명

- 문자열 s 에서 맨 뒤에 있는 문자c를 검색하는 함수이다.  (문자열 s의 마지막인덱스부터 검색) 

#include "libft.h"

char	*ft_strrchr(const char *s, int c)
{
	size_t len;

	len = ft_strlen(s);
	while (len != 0)
	{
		if (s[len] == (char)c)
			return ((char *)&s[len]);
		len--;
	}
	if (s[len] == (char)c)
		return ((char *)s + len);
	return (NULL);
}