KO..?
함수를 다 만들고 테스터기를 돌렸더니 libft-unit-test 에서 KO가 발생하셨나요?
atoi는 int 범위까지 변환하는건데 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
원형 atoi는 strtol(str, (char **)NULL, 10)을 호출하고, 그 결과값을 int 타입으로 형변환해서 반환합니다.
ft_atoi는 ‘str을 long 타입으로 변환한 값’을 ‘int 타입으로 형변환’해서 반환하도록 수정하면 됩니다!
3. Do
1.
유효한 문자열을 long 타입으로 변환한다.
•
변환하다가 overflow가 발생하면 LONG_MAX를 저장한다. underflow가 발생하면 LONG_MIN를 저장한다.
2.
long 타입으로 변환한 값을 int 타입으로 형변환해서 반환한다.