STRTOL(3)

명칭
strtol, strtoq - 캐릭터 라인의 수치를 long 치, long long 치 또는 quad_t 치에 변환

프로그램 라이브러리
libc

서식
<stdlib.h> <limits.h> long strtol(const char *nptr, char **endptr, int base) long long strtoll(const char *nptr, char **endptr, int base) <sys/types.h> <stdlib.h> <limits.h> quad_t strtoq(const char *nptr, char **endptr, int base)

해설
strtol() 함수는, nptr 에 있는 캐릭터 라인을 long 값으로 변환합니다. strtoll() 함수는, nptr 에 있는 캐릭터 라인을 long long 값으로 변환합니다. strtoq() 함수는, nptr 에 있는 캐릭터 라인을 quad_t 값으로 변환합니다. 변환은 주어졌다 base 에 따라 행해집니다. 이 base 의 값은 2 에서 36 의 사이인가, 또는 특별한 값인 0 이 아니면 안됩니다.

캐릭터 라인은, 임의의 수의 공백 캐릭터 (isspace(3) 에 의해 결정할 수 있는 것 같은)로 시작되어, 옵션으로 하나의 ‘+’ 또는 ‘-’ 기호가 거기에 계속됩니다. base 하지만 0 이나 16 때는, 캐릭터 라인은 접두사 ‘0x’ (을)를 포함할 수가 있어 숫자는 기수를 16 으로서 읽어내집니다. 그렇지 않을 때의, 0 의 base 그럼, 그 다음의 캐릭터가 ‘0’ (이)가 아니면 10 (10 진수)으로 보여져 ‘0’ 이면 8 (8 진수)으로 보여집니다.

캐릭터 라인의 나머지는, 주어진 기수에서는 유효한 숫자가 아닌 최초의 캐릭터의 곳에서 중지한다고 한다 알기 쉬운 방식으로 long 값에 변환됩니다. (10 이상의 기수에서는, 대문자 또는 소문자의 ‘A’ (은)는 10 을, ‘B’ (은)는 11 을 나타내, ‘Z’ (은)는 35 를 나타냅니다. )

endptr 하지만 하늘 포인터가 아닌 경우는, strtol() (은)는 최초의 무효인 캐릭터의 주소를 *endptr 에 격납합니다. 숫자가 전혀 없었던 경우는, strtol() 하 nptr 의 원래의 값을 *endptr 에 격납합니다. (따라서, 돌아왔을 때에 *nptr 하지만 ‘\0’ (이)가 아니고, **endptr 하지만 ‘\0’ 인 경우는, 캐릭터 라인 전체가 유효했던 것이 됩니다. )

반환값
strtol() 함수는, 값이 언더 플로우(underflow)이나 오버플로우를 일으키지 않는 이상 변환의 결과를 돌려줍니다. 언더 플로우(underflow)가 일어났을 경우는, strtol() 하 LONG_MIN (을)를 돌려줍니다. 오버플로우가 일어났을 경우는, strtol() 하 LONG_MAX (을)를 돌려줍니다. strtoll() 함수는, 값이 언더 플로우(underflow)이나 오버플로우를 일으키지 않는 이상 변환의 결과를 돌려줍니다. 언더 플로우(underflow)가 일어났을 경우는, strtoll() 하 LLONG_MIN (을)를 돌려줍니다. 오버플로우가 일어났을 경우는, strtoll() 하 LLONG_MAX (을)를 돌려줍니다. 모든 경우, errno 하 ERANGE (으)로 설정됩니다.

에러

[ERANGE]
    주어진 캐릭터 라인이 치역을 넘었습니다. 변환된 값은 고정되고 있습니다.

참조
atof(3), atoi(3), atol(3), strtod(3), strtoul(3)

표준
strtol() 함수는, isoC 에 적합하고 있습니다. strtoll() 함수는, isoC-99 에 적합하고 있습니다. BSD strtoq() 함수는 추천 되지 않습니다.

버그
현재의 로케일을 무시합니다.