strtol
、 wcstol
、 _strtol_l
、 _wcstol_l
文字列を long
整数値に変換します。
構文
long strtol(
const char *string,
char **end_ptr,
int base
);
long wcstol(
const wchar_t *string,
wchar_t **end_ptr,
int base
);
long _strtol_l(
const char *string,
char **end_ptr,
int base,
_locale_t locale
);
long _wcstol_l(
const wchar_t *string,
wchar_t **end_ptr,
int base,
_locale_t locale
);
パラメーター
string
NULL で終わる変換対象の文字列。
end_ptr
最後に解釈された文字の後ろの文字を指すように設定された出力パラメーター。 NULL
の場合は、無視されます。
base
使用する基数。
locale
使用するロケール。
戻り値
strtol
、wcstol
、_strtol_l
、および _wcstol_l
からは、string
で表される値が返されます。 変換できない場合は 0 が返されます。 表される値によってオーバーフローが発生する場合は、LONG_MAX
または LONG_MIN
を返します。
オーバーフローまたはアンダーフローが発生した場合、errno
が ERANGE
に設定されます。 string
が NULL
の場合は、EINVAL
に設定されます。 または、base
がゼロ以外で 2 未満、または 36 を超える場合も同様です。 ERANGE
、EINVAL
、およびその他のエラー コードの詳細については、「errno
、_doserrno
、_sys_errlist
、および _sys_nerr
」を参照してください。
解説
strtol
、wcstol
、_strtol_l
、_wcstol_l
の各関数によって、string
が long
に変換されます。 数値の一部として認識できない文字を最初に見つけた時点で、string
の読み取りを停止します。 これは、終端の null 文字または、base
以上の最初の英数字の場合があります。
wcstol
と _wcstol_l
は、 strtol
と _strtol_l
のワイド文字バージョンです。 これらの string
引数はワイド文字列です。 それ以外では、これらの関数の動作は strtol
および _strtol_l
と同じです。 ロケールの LC_NUMERIC
カテゴリの設定に基づいて、string
の小数点文字 (小数マーカーまたは小数点) の認識が決定されます。 strtol
および wcstol
関数では、現在のロケールを使用します。 _strtol_l
と _wcstol_l
では、代わりに渡されたロケールが使用されます。 詳細については、[setlocale
] と「ロケール」を参照してください。
end_ptr
が NULL
の場合、それは無視されます。 それ以外の場合は、スキャンを停止させた文字へのポインターを end_ptr
が指す位置に格納します。 有効な数字が見つからない場合、または無効な base が指定されている場合は、変換できません。 そして、string
の値は、end_ptr
が指している場所に格納されます。
strtol
は、string
が次の形式の文字列を指すものと想定します。
[
whitespace
] [{+
|-
}] [0
[{x
|X
}]] [alphanumerics
]
角かっこ ([ ]
) で囲まれているのは、省略可能な要素です。 中かっこと垂直バー ({ | }
) で囲まれているのは、1 つの要素を選択する選択肢です。 whitespace
は、空白文字とタブ文字で構成される場合がありますが、これは無視されます。 alphanumerics
は、10 進数または'z'
(または'A'
から 'Z'
) までの'a'
文字です。 この形式に一致しない最初の文字でスキャンが停止します。 base
が 2 から 36 の間の場合、数値の基数として使用されます。 base
が 0
の場合、string
が指す文字列の先頭の文字を使用して、基数を判断します。 最初の文字が 0
で、2 番目の文字が 'x'
または 'X'
以外の場合、文字列は 8 進数と解釈されます。 最初の文字が '0'
で、2 番目の文字が 'x'
または 'X'
である場合、文字列は 16 進数と解釈されます。 最初の文字が '1'
から '9'
の間の数値の場合、文字列は 10 進数と解釈されます。 'a'
から 'z'
(または 'A'
から 'Z'
) の文字には、10 から 35 の値が割り当てられます。 スキャンでは、値が base
未満の文字のみが許可されます。 基数の範囲外にある文字を最初に見つけた時点で、スキャンは停止されます。 たとえば、string
が "01"
で始まるとします。 base
が 0
の場合、スキャナーでは 8 進整数と見なされます。 文字 '8'
または '9'
でスキャンが停止します。
既定では、この関数のグローバル状態の適用対象は、アプリケーションになります。 この動作を変更するには、「CRT でのグローバル状態」を参照してください。
汎用テキスト ルーチンのマップ
TCHAR.H のルーチン | _UNICODE と _MBCS が定義されていない |
_MBCS が定義されている |
_UNICODE が定義されている |
---|---|---|---|
_tcstol |
strtol |
strtol |
wcstol |
_tcstol_l |
_strtol_l |
_strtol_l |
_wcstol_l |
要件
ルーチンによって返される値 | 必須ヘッダー |
---|---|
strtol |
<stdlib.h> |
wcstol |
<stdlib.h> または <wchar.h> |
_strtol_l |
<stdlib.h> |
_wcstol_l |
<stdlib.h> または <wchar.h> |
_strtol_l
および _wcstol_l
関数は、標準 C ライブラリの一部ではなく、Microsoft 固有のものです。 互換性の詳細については、「 Compatibility」を参照してください。
例
strtod
の例を参照してください。
関連項目
データ変換
ロケール
localeconv
setlocale
, _wsetlocale
文字列から数値の関数
strtod
、 _strtod_l
、 wcstod
、 _wcstod_l
strtoll
、 _strtoll_l
、 wcstoll
、 _wcstoll_l
strtoul
、 _strtoul_l
、 wcstoul
、 _wcstoul_l
atof
、 _atof_l
、 _wtof
、 _wtof_l