STRTOUL(3)

명칭
strtoul, strtoull, strtouq - 캐릭터 라인을 unsigned long 치, unsigned long long 치 또는 uquad_t 치 에 변환

프로그램 라이브러리
libc

서식
<stdlib.h> <limits.h> unsigned long strtoul(const char *nptr, char **endptr, int base) unsigned long long strtoull(const char *nptr, char **endptr, int base) <sys/types.h> <stdlib.h> <limits.h> u_quad_t strtouq(const char *nptr, char **endptr, int base)

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

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

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

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

반환값
strtoul() 함수는, 원래의 (부정되어 있지 않다) 값이 오버플로우를 일으킬 것 같지 않은 한, 변환의 결과, 혹은 선두에 마이너스 기호가 있는 경우에는 변환 결과의 부정을 돌려줍니다. 오버플로우를 일으키는 경우, strtoul() 하 ULONG_MAX (을)를 돌려줍니다. strtoull() 함수는, 원래의 (부정되어 있지 않다) 값이 오버플로우를 일으킬 것 같지 않은 한, 변환의 결과, 혹은 선두에 마이너스 기호가 있는 경우에는 변환 결과의 부정을 돌려줍니다. 오버플로우를 일으키는 경우, strtoull() 하 ULLONG_MAX (을)를 돌려줍니다. 모든 경우로, errno 에 ERANGE (을)를 설정합니다.

에러

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

참조
strtol(3)

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

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