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
使用するロケール。

戻り値

strtolwcstol_strtol_l、および _wcstol_l からは、string で表される値が返されます。 変換できない場合は 0 が返されます。 表される値によってオーバーフローが発生する場合は、LONG_MAX または LONG_MIN を返します。

オーバーフローまたはアンダーフローが発生した場合、errnoERANGE に設定されます。 stringNULL の場合は、EINVAL に設定されます。 または、base がゼロ以外で 2 未満、または 36 を超える場合も同様です。 ERANGEEINVAL、およびその他のエラー コードの詳細については、「errno_doserrno_sys_errlist、および _sys_nerr」を参照してください。

解説

strtolwcstol_strtol_l_wcstol_l の各関数によって、stringlong に変換されます。 数値の一部として認識できない文字を最初に見つけた時点で、string の読み取りを停止します。 これは、終端の null 文字または、base 以上の最初の英数字の場合があります。

wcstol_wcstol_l は、 strtol_strtol_lのワイド文字バージョンです。 これらの string 引数はワイド文字列です。 それ以外では、これらの関数の動作は strtol および _strtol_l と同じです。 ロケールの LC_NUMERIC カテゴリの設定に基づいて、string の小数点文字 (小数マーカーまたは小数点) の認識が決定されます。 strtol および wcstol 関数では、現在のロケールを使用します。 _strtol_l_wcstol_l では、代わりに渡されたロケールが使用されます。 詳細については、[setlocale] と「ロケール」を参照してください。

end_ptrNULL の場合、それは無視されます。 それ以外の場合は、スキャンを停止させた文字へのポインターを end_ptr が指す位置に格納します。 有効な数字が見つからない場合、または無効な base が指定されている場合は、変換できません。 そして、string の値は、end_ptr が指している場所に格納されます。

strtol は、string が次の形式の文字列を指すものと想定します。

[whitespace] [{+ | -}] [0 [{ x | X }]] [alphanumerics]

角かっこ ([ ]) で囲まれているのは、省略可能な要素です。 中かっこと垂直バー ({ | }) で囲まれているのは、1 つの要素を選択する選択肢です。 whitespace は、空白文字とタブ文字で構成される場合がありますが、これは無視されます。 alphanumericsは、10 進数字または英字 'a' (または'A'通し'z''Z') です。 この形式に一致しない最初の文字でスキャンが停止します。 base が 2 から 36 の間の場合、数値の基数として使用されます。 base0 の場合、string が指す文字列の先頭の文字を使用して、基数を判断します。 最初の文字が 0 で、2 番目の文字が 'x' または 'X' 以外の場合、文字列は 8 進数と解釈されます。 最初の文字が '0' で、2 番目の文字が 'x' または 'X' である場合、文字列は 16 進数と解釈されます。 最初の文字が '1' から '9' の間の数値の場合、文字列は 10 進数と解釈されます。 'a' から 'z' (または 'A' から 'Z') の文字には、10 から 35 の値が割り当てられます。 スキャンでは、値が base 未満の文字のみが許可されます。 基数の範囲外にある文字を最初に見つけた時点で、スキャンは停止されます。 たとえば、string"01" で始まるとします。 base0 の場合、スキャナーでは 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