atoi 함수에서 LONG_MAX와 LONG_MIN을 넘어가는 값이 0과 -1로 고정되는 이유.

김성준·2021년 5월 15일
0

glibc에서 atoi함수의 원형을 보면 이렇습니다.

strtol함수를 통해 문자열을 정수로 바꿔준 후 int로 캐스팅만 하여 리턴합니다.

이 과정에서 LONG_MAX값 이상의 숫자와 LONG_MIN값 이하의 숫자들이 고정이 됩니다.

strtol함수의 man 페이지를 봅시다.

strtol 함수는 LONG_MIN과 LONG_MAX의 값을 넘어가면 오버플로우와 언더플로우가 일어나서 더 이상 변환하지 않습니다. 실제로 더 큰 값을 넣고 함수를 돌려보면 LONG_MIN과 LONG_MAX의 값만 고정되어 출력되는 것을 알 수 있습니다.

결국, atoi함수는 이러한 strtol함수의 결과를 int로 캐스팅하여 반환합니다. 따라서 LONG_MAX를 넘어가는 값은 LONG_MAX를 int로 캐스팅 한 -1이 리턴되고 LONG_MIN을 넘어가는 값은 LONG_MIN을 int로 캐스팅한 0값이 리턴되는 것입니다.

profile
수신제가치국평천하

0개의 댓글