ft_putnbr_fd 구현
1. ft_putnbr_fd 용도
* 파라미터로 들어오는 fd와 int 변수 n을 이용해 n을 출력하는 함수
2. ft_putnbr_fd 프로토타입
void ft_putnbr_fd(int n, int fd)
int n : 출력할 정수. 다만 write는 char형 변수의 주소를 이용해 출력하므로 n의 각 자릿수에 '0'을 더한 값을 출력
int fd : 파일 디스크립터. 정수값으로 파일 디스크립터를 받음.
3. 파일 디스크립터란?
-
유닉스 시스템에서 프로세스가 특정 파일에 접근하기 위한 추상적인 키.
-
모든 프로세스(프로그램이 메모리에 적재된 것. 프로그램의 인스턴스)가 갖추어야 하는 표준 POSIX 파일 서술자는 하단과 같다.
-
file descriptor의 값은 unsigned int 값이므로 음수가 될 수 없다.
-
다만 실제 write함수에서 테스트해본 결과 파일 디스크립터의 숫자에 상관없이 모두 출력한다. 파일 디스크립터의 정수에 따라 무엇이 달라지는지는 더욱 알아봐야 할 것 같다.
4. 구현 시 유의사항
-
n이 -2147483648, 즉 int형 min값일 때는 n에 -1을 곱한 수가 int overflow가 발생한다. 이를 예외처리 해 주어야 한다.
-
재귀를 이용해 코드를 구현했다. n의 각 자릿수에 '0'을 더한 값을 출력하기 위해 n의 범위를 나누어준다.
5. 코드 구현
#include "libft.h"
void ft_putnbr_fd(int n, int fd)
{
if (n == -2147483648)
{
write(fd, "-2147483648", 11);
}
else if (n < 0)
{
write(fd, "-", 1);
ft_putnbr_fd(-n, fd);
}
else if (n < 10 && n >= 0)
{
ft_putchar_fd(n + '0', fd);
}
else if (n > 0)
{
ft_putnbr_fd(n / 10, fd);
ft_putchar_fd(n % 10 + '0', fd);
}
}
6. 코드 구현 방법
(1) n이 -2147483648, 즉 int형 min값인지 검사한 후, int min값이면 -2147483648을 출력한다.
(2) n이 음수이면, -를 출력한 후 다시 ft_putnbr_fd함수를 -n값과 fd를 인자로 호출한다;
(3) n이 0부터 9 사이, 즉 한 자릿수이면 '0'을 더해 출력한다.
(4) n이 0보다 크면 n을 10으로 나눈 몫과 fd를 인자로 ft_putnbr_fd 함수를 호출한다.
(5) 그 이후 n을 10으로 나눈 나머지에 '0'을 더한 값을 ft_putchar_fd 함수의 인자로 하고 함수를 호출한다.
-->재귀
Author And Source
이 문제에 관하여(ft_putnbr_fd 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@yeunjoo121/ftputnbrfd저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)