strtol() - strtoll() — 文字ストリングから long 型および long long 型整数への変換
フォーマット (strtol())
#include <stdlib.h>
long int strtol(const char *nptr, char **endptr, int base);
フォーマット (strtoll())
#include <stdlib.h>
long long int strtoll(char *string, char **endptr, int base);
言語レベル
ANSI
スレッド・セーフ
はい
ロケール依存
これらの関数の振る舞いは、現行ロケールの LC_CTYPE カテゴリーの影響を受ける可能性があります。詳細については、CCSID およびロケールの理解を参照してください。
説明
strtol() 関数は、文字ストリングを long 型整数値に 変換します。パラメーター nptr により、 long 型整数の数値として解釈できる文字のシーケンスが示されます。
strtoll() 関数は、文字ストリングを long long 型整数値に変換します。パラメーター nptr により、 long long 型整数の数値として解釈できる文字のシーケンスが示されます。
これらの関数を使用する場合は、nptr パラメーターによって、 次の形式のストリングが指されている必要があります。
base パラメーターの値が 2 と 36 の間の場合には、 サブジェクト・シーケンスの想定される形式は、 基数が base パラメーターで指定される整数を表す 文字と数字のシーケンスです。このシーケンスは、オプションで先頭に正符号 (+) または負符号 (-) が付きます。a から z までを含めた文字 (大文字または小文字) は、 10 から 35 までの値として見なされます。これらの値が base パラメーターの値より小さい文字だけが許可されます。base パラメーターの値が 16 の場合には、文字 0x または 0X はオプションで一連の文字および 数字の前に付くことがありますが、正符号 (+) または 負符号 (-) があるとその後に続きます。
base パラメーターの値が 0 である場合、ストリングは base を決定します。 オプションの先行符号の後、先行 0 は 8 進変換を示し、先行 0x または 0X は 16 進変換を示し、その他のすべての先行文字は結果として 10 進変換になります。
これらの関数は、base パラメーターと不整合な 最初の文字に達するまで、ストリングを走査します。この文字は、ストリングの最後にある ヌル文字 ('¥0') である場合もあります。先行空白文字は無視され、 オプションの符号が数字の前に付く場合があります。
endptr パラメーターの値がヌル以外の場合、 ポインター (走査を終了した文字へのポインター) は endptr が指す値に保管されます。値を形成できない場合、 endptr が指す値は nptr パラメーターに設定されます。
戻り値
base に無効値 (0 より小さい、1、または 36 より大きい) が 含まれる場合、errno は EINVAL に設定され、0 が戻されます。endptr パラメーターが指す値は、 nptr パラメーターの値に設定されます。
この値が表示可能値の範囲外にある場合には、errno は ERANGE に設定されます。この値が正の場合、strtol() 関数は LONG_MAX を戻し、strtoll() 関数は LONGLONG_MAX を戻します。 この値が負の場合、strtol() 関数は LONG_MIN を戻し、 strtoll() 関数は LONGLONG_MIN を戻します。
文字が変換されなかった場合、strtoll() 関数および strtol() 関数は errno を EINVAL に設定し、0 が戻されます。どちらの関数の場合も、 endptr が指す値は、 nptr パラメーターの値に設定されます。正常終了の場合は、 両方の関数が変換済みの値を戻します。
例
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
char *string, *stopstring;
long l;
int bs;
string = "10110134932";
printf("string = %s¥n", string);
for (bs = 2; bs <= 8; bs *= 2)
{
l = strtol(string, &stopstring, bs);
printf(" strtol = %ld (base %d)¥n", l, bs);
printf(" Stopped scan at %s¥n¥n", stopstring);
}
}
/***************** Output should be similar to: *****************
string = 10110134932
strtol = 45 (base 2)
Stopped scan at 34932
strtol = 4423 (base 4)
Stopped scan at 4932
関連情報
- atof() — 文字ストリングから浮動小数点への変換
- atoi() — 文字ストリングから整数への変換
- atol() - atoll() — 文字ストリングの long 型整数または long long 型整数への変換
- strtod() - strtof() - strtold() — 文字ストリングから double、浮動、および long double への変換
- strtod32() - strtod64() - strtod128() — 文字ストリングから 10 進浮動小数点への変換
- strtoul() - strtoull() — 文字ストリングから符号なし long 型整数および符号なし long long 型整数への変換
- wcstol() - wcstoll() — ワイド文字ストリングから long 型および long long 型整数への変換
- <stdlib.h >
