Search
Duplicate
⁉️

[Libft/ft_atoi] your atoi does not work with long max/min value?

간단소개
ft_atoi 함수 KO 방지
팔만코딩경 컨트리뷰터
ContributorNotionAccount
주제 / 분류
42cursus
C
Scrap
태그
c언어
9 more properties

KO..?

함수를 다 만들고 테스터기를 돌렸더니 libft-unit-test 에서 KO가 발생하셨나요?
atoiint 범위까지 변환하는건데 long 범위에서 동작하지 않는게 뭔상관이야? 라고 생각했다가 리트를 하게 됐습니다....하하 (평바평이니 KO가 뜨더라도 통과하실 수도 있습니다!)
이 글은 위 두개의 KO를 OK로 바꾸고 싶으신 분들께 약간의 도움을 드리고자 작성했습니다. 코드는 안적었으니 마음편히 보셔도 됩니다!

1. man atoi

1.
atoi의 매뉴얼을 본다.
int atoi(const char *str);
atoi() 함수는 str이 가리키는 문자열의 초기 부분을 int 표현으로 변환한다. 다음과 같다: (int)strtol(str, (char **)NULL, 10);
2.
strtol의 매뉴얼을 본다.
strtol(const char *str, char **endptr, int base);
strtol() 함수는 str의 문자열을 long 값으로 변환한다.
변환은 주어진 base에 따라 수행된다.
문자열은 임의의 공백(isspace()에 의해 결정됨)으로 시작하고 ‘+’ ‘-’ 기호가 올 수 있다.
문자열의 나머지 부분은 long 값으로 변환되어 주어진 base에서 유효한 숫자가 아닌 첫 번째 문자에서 멈춘다.
값이 underflow 또는 overflow되지 않는 한 strtol() 함수는 변환결과를 반환한다. 변환을 수행할 수 없으면 0이 반환된다.
underflow 또는 overflow가 발생하면 LONG_MIN, LONG_MAX 값이 반환된다.

2. Idea

원형 atoistrtol(str, (char **)NULL, 10)을 호출하고, 그 결과값을 int 타입으로 형변환해서 반환합니다.
ft_atoistrlong 타입으로 변환한 값’int 타입으로 형변환’해서 반환하도록 수정하면 됩니다!

3. Do

1.
유효한 문자열을 long 타입으로 변환한다.
변환하다가 overflow가 발생하면 LONG_MAX를 저장한다. underflow가 발생하면 LONG_MIN를 저장한다.
2.
long 타입으로 변환한 값을 int 타입으로 형변환해서 반환한다.

도움이 필요하다면 열어보세요