EN JA
STRTOL(3)
STRTOL(3) FreeBSD Library Functions Manual STRTOL(3)

名称

strtol, strtoll, strtoimax, strtoq文字列の値を long, long long, intmax_t または quad_t 整数に変換する

ライブラリ

Standard C Library (libc, -lc)

書式

#include < stdlib.h>
#include < limits.h>

long
strtol( const char * restrict nptr, char ** restrict endptr, int base);

long long
strtoll( const char * restrict nptr, char ** restrict endptr, int base);

#include < inttypes.h>

intmax_t
strtoimax( const char * restrict nptr, char ** restrict endptr, int base);

#include < sys/types.h>
#include < stdlib.h>
#include < limits.h>

quad_t
strtoq( const char *nptr, char **endptr, int base);

解説

strtol() 関数は、 nptr の文字列を long 値に変換します。 strtoll() 関数は、 nptr の文字列を long long 値に変換します。 strtoimax() 関数は nptr の文字列を intmax_t 値に変換します。 strtoq() 関数は、 nptr の文字列を quad_t 値に変換します。変換は与えられた base に従って行われます。それは 2 から 36 の間か、または特別な値 0 でなければなりません。

文字列は、任意の数の空白類 ( isspace(3) により決められるような) で始まり、省略可能な一つの‘ +’または‘ -’サインが続きます。 base が 0 か 16 なら、文字列は接頭辞“ 0x”を含むことができ、数字は基数を 16 として読み込まれます。そうでなければ、次の文字が‘ 0’でなければ 0 の base は、 10 (10 進数) として得られ、‘ 0’であれば 8 (8 進数) として得られます。

文字列の残りは、文字列の終りか与えられた基数では有効な数字を取り出せない最初の文字で止まり、明らかな方法で long, long long, intmax_t または quad_t 値に変換されます。 (10 以上の基数では、大文字または小文字の‘ A’は 10 を、‘ B’は 11 を表し、‘ Z’は 35 を表します。)

endptrNULL ではない場合は、 strtol() は最初の無効な文字のアドレスを *endptr に格納します。数字が全くなかった場合は、 strtol() は nptr の元の値を *endptr に格納します。 (従って、戻ったときに *nptr が‘ \0’ではなく、 **endptr が‘ \0’である場合は、文字列全体が有効でした。)

戻り値

strtol(), strtoll(), strtoimax() strtoq() 関数は値がアンダフローかオーバフローでなければ、変換の結果を返します。変換を実行できないなら、0 を返し、グローバル変数 errnoEINVAL (この前の機能はすべてのプラットフォームで移植可能ではありません) に設定されます。オーバフローかアンダフローが起こるなら、 errnoERANGE に設定され、関数の返り値は次のテーブルに従った値となります。
関数 アンダフロー オーバフロー
strtol() LONG_MIN LONG_MAX
strtoll() LLONG_MIN LLONG_MAX
strtoimax() INTMAX_MIN INTMAX_MAX
strtoq() LLONG_MIN LLONG_MAX

エラー

[ EINVAL]
base の値がサポートされていないか、変換を実行できませんでした (この前の機能はすべてのプラットフォームで移植可能ではありません)。
[ ERANGE]
与えられた文字列が範囲外でした。変換された値は固定されました。

規格

strtol() 関数は、 ISO/IEC 9899:1990 (“ISO C90”) に適合しています。 strtoll() と strtoimax() 関数は、 ISO/IEC 9899:1999 (“ISO C99”) に適合しています。 BSD strtoq() 関数は推奨されません。
November 28, 2001 FreeBSD