안녕하세요! 두번째는 mem시리즈입니다.

 

 

💡 memset 함수

 ✅ memset 함수는 메모리의 내용을 원하는 크기만큼 특정한 값으로 채우는 것으로, 가리키는 메모리 주소부터 n바이트 만큼 c값으로 채워줍니다.

 ✅ 함수의 원형은 void *memset(void *b, int c, size_t len);입니다.

 ❗ 성공시 첫번째 인자로 들어간 string을 반환, 실패시 NULL을 반환한다.

 

 

  ✔ memset 구현

더보기
#include "libft.h"

void	*ft_memset(void *b, int c, size_t len)
{
	unsigned char	*ch;
	int		i;

	ch = (unsigned char *)b;
	i = 0;
	while (len)
	{
		ch[i++] = c;
		len--;
	}
	return (b);
}

 

 

💡 memove 함수

 ✅ memove 함수는 메모리의 내용을 n 사이즈만큼 dest의 메모리에 옮기는 함수입니다.

 ✅ 함수의 원형은 void *memmove(void *dest, const void *src, size_t n);입니다.

 ✅ 메모리가 겹쳐도 문제가 생기지 않도록, src의 주소가 dest보다 큰 값인 경우와 아닌 경우로 나눠서 동작합니다.

 ✅ src의 주소가 더 큰 경우, src를 앞부터 복사하더라도 dest가 항상 큰 위치이기 때문에 문제가 생기지 않습니다.

 ✅ src의 주소가 더 작은 경우, 앞부터 복사할 경우 src의 data가 바뀐 상태로 dest에 저장될 수 있기 때문에 마지막 데이터부터 한 바이트씩 dest의 마지막 데이터부터 차례대로 넣어줍니다.

 ❗ dest를 반환한다. 

 

  ✔ memmove 구현

더보기
#include "libft.h"

void	*ft_memmove(void *dest, const void *src, size_t n)
{
	size_t	i;
	size_t	loc;

	if ((dest == NULL && src == NULL) || (n < 0))
		return (0);
	else if (dest < src)
	{
		i = -1;
		while ((size_t)++i < n)
			((unsigned char *)dest)[i] = ((unsigned char *)src)[i];
	}
	else
	{
		if (n == 0)
			return (dest);
		loc = n - 1;
		while (loc > 0)
		{
			((unsigned char *)dest)[loc] = ((unsigned char *)src)[loc];
			loc--;
		}
		((unsigned char *)dest)[0] = ((unsigned char *)src)[0];
	}
	return (dest);
}

 

💡 memchr 함수

 ✅ memchr 함수는 인자로 받아온 메모리 중 n 사이즈 크기에서 원하는 문자를 찾는 함수입니다.

 ✅ 함수의 원형은 void *ft_memchr(const void *s, int c, size_t n);입니다.

 ✅ c와 일치하는 값이 있다면 그 곳의 주소를 return, 만약 값을 찾지 못한다면 NULL을 리턴합니다.

 

  ✔ memchr 구현

더보기
#include "libft.h"

void	*ft_memchr(const void *s, int c, size_t n)
{
	size_t	i;

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

 

 

💡 memcpy 함수

 ✅ memcpy 함수는 메모리의 일부분을 복사하는 함수로, src의 n바이트만큼을 dst에 복사합니다.

 ✅ 함수의 원형은 void *memcpy(void *dst, const void *src, size_t n);입니다.

 ✅ 전체 복사 시 길이를 계산할 경우 "\0"의 길이도 계산해서 넣어야하기 때문에 1을 더한 길이만큼 해주어야 합니다.

 ❗ dst를 반환한다. 

 

  ✔ memcpy 구현

더보기
#include "libft.h"

void	*ft_memcpy(void *dst, const void *src, size_t n)
{
	unsigend char	*ch;
	unsigned char	*sch;
	int		i;

	if (!dst && !src)
		return (0);
	i = 0;
	ch = (unsigned char *)dst;
	sch = (unsigned char *)src;
	while (n)
	{
		ch[i] = sch[i];
		i++;
		n--;
	}
	return (dst);
}

 

 

 

💡 memcmp 함수

 ✅ memcmp 함수는 s1과 s2를 n만큼 비교하여 같으면 0, 다르면 그 바이트를 unsigned char로 해석했을 때 s1과 s2의 차이만큼을 반환합니다. 

 ✅ 함수의 원형은 int memcmp(const void *s1, const void *s2, size_t n);입니다. 

 

 

  ✔ memcmp 구현

더보기
#include "libft.h"

int	ft_memcmp(const void *s1, const void *s2, size_t n)
{
	size_t	i;

	i = 0;
	while (i < n)
	{
		if (((unsigned char *)s1)[i] != ((unsigned char *)s2)[i])
			return (((unsigned char *)s1)[i] - ((unsigned char *)s2)[i]);
		i++;
	}
	return (0);
}

 

 

'42서울' 카테고리의 다른 글

[libft] ft_atoi  (0) 2022.02.18
[libft] tolower & toupper  (0) 2022.02.17
Libft - is시리즈  (1) 2022.01.05
42서울 라피신 후기  (0) 2022.01.05

안녕하세요:)

C언어에서 원하는 특징을 확인할 경우 사용되는 함수들을 가져와 봤습니다.

 

💡 isalpha

 ✅isalpha함수는 알파벳인지 아닌지를 확인할 수 있는 함수입니다.

 ✅함수원형은 int isalpha(int c);이며 <ctype.h>헤더에 들어있습니다.

    📌알파벳은 문자인데 int c를 통해 받아오는 이유는 C언어에서는 아스키코드에 해당하는 문자들이 숫자로 표현되기 때문입니다. 따라서, int형에 문자를 집어넣어도 자동으로 아스키코드에 있는 숫자로 들어가 정상적으로 동작하게 됩니다.

 ✅isalpha는 알파벳이 아닌 경우 0(false)을 반환하고, 알파벳인 경우 0이 아닌 수(true)를 반환한다고 합니다.

 

 

💡 isdigit

 ✅isdigit함수는 10진수 숫자로 변경이 가능하면 0이아닌 수(true), 아니면 0(false)를 반환하는 함수입니다.

 ✅함수원형은 int isdigit(int c);이며 <ctype.h>헤더에 들어있습니다.

 

💡 isalnum

 ✅isalnum함수는 알파벳 또는 숫자이면 0이 아닌 값(true)을 반환하는 함수입니다.

 ✅함수원형은 int isalnum(int c);이며 <ctype.h>헤더에 들어있습니다.

 

💡 isascii

 ✅isascii함수는 인수로 받은 문자가 ASCII문자이면 0이 아닌 값(true)을 반환하는 함수입니다.

 ✅함수원형은 int isascii(int c);이며 <ctype.h>헤더에 들어있습니다.

 

💡 isprint

 ✅isprint함수는 인수로 받은 문자가 인쇄가능한 문자이면(공백문자 포함) 0이 아닌 값(true)을 반환하는 함수입니다.

 ✅함수원형은 int isprint(int c);이며 <ctype.h>헤더에 들어있습니다.

 

'42서울' 카테고리의 다른 글

[libft] ft_atoi  (0) 2022.02.18
[libft] tolower & toupper  (0) 2022.02.17
libft - mem시리즈  (0) 2022.02.08
42서울 라피신 후기  (0) 2022.01.05

라피신 후기는 네이버 블로그에 정리되어있습니다~!

모두들 놀러오세요🎆

 

https://blog.naver.com/6792kjs/222511469017

'42서울' 카테고리의 다른 글

[libft] ft_atoi  (0) 2022.02.18
[libft] tolower & toupper  (0) 2022.02.17
libft - mem시리즈  (0) 2022.02.08
Libft - is시리즈  (1) 2022.01.05

+ Recent posts