bzero 함수 구현하기

윤효준·2024년 7월 23일
0

42 Libft 복습

목록 보기
8/28

bzero 함수의 manual은 다음과 같다!

Synopsis

#include <strings.h>

void	bzero(void *s, size_t n);

Description

  • bzero함수는 문자열 sn 바이트의 0을 쓴다. 만약 n이 0이면, bzeor()는 아무 것도 하지 않는다.

역할이 앞의 memset 함수와 유사하다는 것을 볼 수 있다. 범용성 측면에서는 memset이 더 좋다는 것도 알 수 있다.

그렇기에 POSIX 표준에서는 bzero를 폐기하고 memset을 사용하는 것을 권장한다.

POSIX 표준이란 Portable Operating System Interface의 약자로 이식 가능한 운영 체제 인터페이스를 의미한다. 서로 다른 Unix 운영 체제들 간의 호환성을 보장하기 위해 표준화된 API를 제공한다.

그럼 폐기된 함수를 왜 구현하고 공부하는가에 대한 의문을 가질 수 있는데 이는 레거시 코드 이해를 위한 것이라고 볼 수 있다. 많은 기존 코드베이스, 특히 오래된 시스템이나 소프트웨어에서 bzero가 사용되고 있을 수 있고 이러한 코드를 유지보수하거나 디버깅할 때 bzero의 동작을 이해하는 것이 중요하기 때문이다.

구현

방법1

void	ft_bzero(void *s, size_t n)
{
	unsigned char	*str;

	str = (unsigned char *) s;
	while (n > 0)
	{
		*str = '\0';
		str++;
		n--;
	}
}

방법2

  • 방법1에서 증감 연산자과 연산을 한 줄로 표현한 것이다.
void	ft_bzero(void *s, size_t n)
{
	unsigned char	*str;

	str = (unsigned char *) s;
	while (n-- > 0)
		*str++ = '\0';
}

방법3

  • bzero 함수가 memset함수와 유사하다는 점을 이용했다.
void	ft_bzero(void *s, size_t n)
{
	ft_memset(s, 0, n); //이전 게시글에서 구현
}
profile
작은 문제를 하나하나 해결하며, 누군가의 하루에 선물이 되는 코드를 작성해 갑니다.

0개의 댓글