STRTOUL(3) | FreeBSD Library Functions Manual | STRTOUL(3) |
名称
strtoul, strtoull, strtoumax, strtouq — 文字列を unsigned long, unsigned long long, uintmax_t, または u_quad_t 整数に変換するライブラリ
Standard C Library (libc, -lc)書式
#include < stdlib.h>#include < limits.h>
unsigned long
strtoul( const char * restrict nptr, char ** restrict endptr, int base);
unsigned long long
strtoull( const char * restrict nptr, char ** restrict endptr, int base);
#include < inttypes.h>
uintmax_t
strtoumax( const char * restrict nptr, char ** restrict endptr, int base);
#include < sys/types.h>
#include < stdlib.h>
#include < limits.h>
u_quad_t
strtouq( const char *nptr, char **endptr, int base);
解説
strtoul() 関数は、 nptr の文字列を unsigned long 値に変換します。 strtoull() 関数は、 nptr の文字列を unsigned long long 値に変換します。 strtoumax() 関数は、 nptr の文字列を uintmax_t 値に変換します。 strtouq() 関数は、 nptr の文字列を u_quad_t 値に変換します。変換は与えられた base に従って行われます。それは 2 から 36 の間か、または特別な値 0 でなければなりません。 文字列は、任意の数の空白類 ( isspace(3) により決められるような) で始まり、省略可能な一つの‘ +
’または‘ -
’サインが続きます。 base が 0 か 16 ならば、文字列は接頭辞“ 0x
”を含むことができ、数字は基数を 16 として読み込まれます。そうでなければ、次の文字が‘ 0
’でなければ 0 の base は、 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(), strtoull(), strtoumax() strtouq() 関数は、元の (否定されていない) 値がオーバフローしなければ、変換の結果か、もしくは先導するマイナスサインがある場合には変換結果の否定を返します。オーバフローする場合、 strtoul() は ULONG_MAX を返し、 strtoull() は ULLONG_MAX を返し、 strtoumax() は UINTMAX_MAX を返し、 strtouq() は ULLONG_MAX を返します。全ての場合で、 errno は ERANGE に設定されます。変換を実行できないなら、0 を返し、グローバル変数 errno は EINVAL (この前の機能はすべてのプラットフォームで移植可能ではありません) に設定されます。エラー
- [ EINVAL]
- base の値がサポートされていないか、変換を実行できませんでした (この前の機能はすべてのプラットフォームで移植可能ではありません)。
- [ ERANGE]
- 与えられた文字列が範囲外でした。変換された値は固定されました。
規格
strtoul() 関数は、 ISO/IEC 9899:1990 (“ISO C90”) に適合しています。 strtoull() と strtoumax() 関数は、 ISO/IEC 9899:1999 (“ISO C99”) に適合しています。 BSD strtouq() 関数は、推奨されません。November 28, 2001 | FreeBSD |