memset이 뭐예여
memset 함수란, memory + setting (메모리를 특정값으로 설정한다.) 라고 생각하면 된다.
함수 원형 : void memset(void s, int c, size_t n)
void *s: 세팅하고자(값을 채울) 하는 메모리 주소 (최종 리턴값)
int c: 메모리에 세팅하고자 하는 값 / int로 받지만 unsigned char로 변환이 되어 저장됨.
size_t n: 메모리에 몇 바이트를 채울 것인지 (길이)
#include "libft.h"
void *ft_memset(void *s, int c, size_t n)
{
unsigned char *ss;
size_t i;
if (!s && n > 0) //s가 NULL인데 0이 아닌 길이를 사용할 경우 에러가 발생하니 예외처리
return (NULL);
ss = (unsigned char *)s; //메모리 시작주소 받기 (unsigned char로 캐스팅)
c = (unsigned char)c; //채우고자 하는 내용 (unsigned char로 캐스팅)
i = 0;
while (i < n)
ss[i++] = c;
return (s);
}
unsigned char로 캐스팅 한 이유?
memset은 메모리를 1바이트 단위로 채워야하는데 char 타입은 signed/unsigned 문제가 발생할 수 있으니 반드시 unsigned char 포인터로 작업해야 한다.
bzero 뭐예요
메모리 블록을 전부 0으로 초기화하는 함수
함수 원형: void bzero(void *s, size_t n)
void *s 메모리 블록 시작 주소
size_t n 0으로 초기화할 바이트 수
구현방법? 방금 만든 memset을 이용하면 된다.
#include "libft.h"
void ft_bzero(void *s, size_t n)
{
if (!s && n > 0) //s가 NULL인 상황에서 n이 0보다 크면 에러발생
return ;
ft_memset(s, 0, n); /메모리 s를 0으로 n만큼 초기화
}