memset + bzero

유제민·2025년 4월 9일

42경산

목록 보기
3/17

memset이 뭐예여

memset 함수란, memory + setting (메모리를 특정값으로 설정한다.) 라고 생각하면 된다.

함수 원형 : void memset(void s, int c, size_t n)
void *s: 세팅하고자(값을 채울) 하는 메모리 주소 (최종 리턴값)
int c: 메모리에 세팅하고자 하는 값 / int로 받지만 unsigned char로 변환이 되어 저장됨.
size_t n: 메모리에 몇 바이트를 채울 것인지 (길이)

ft_memset 구현

#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을 이용하면 된다.

ft_bzero 구현

#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만큼 초기화
}

profile
무진장 게으른

0개의 댓글