strtoul() - strtoull() — 文字ストリングから符号なし long 型整数および符号なし long long 型整数への変換

形式 (strtoul())

#include <stdlib.h>
unsigned long int strtoul(const char *nptr, char **endptr, int base);

形式 (strtoull())

#include <stdlib.h>
unsigned long long int strtoull(char *string, char **endptr, int base);

言語レベル

ANSI

スレッド・セーフ

はい

ロケール依存

これらの関数の振る舞いは、現行ロケールの LC_CTYPE カテゴリーの影響を受ける可能性があります。 詳しくは、 CCSID とロケールについてを参照してください。

説明

strtoul() 関数は、文字ストリングを符号なし long 型整数値に変換します。 パラメーター nptr により、 符号なし long 型整数の数値として解釈できる文字のシーケンスが示されます。

strtoull() 関数は、文字ストリングを符号なし long long 型整数値に変換します。 パラメーター nptr により、 符号なし long long 型整数の数値として解釈できる文字のシーケンスが示されます。

これらの関数を使用する場合は、nptr パラメーターによって、 次の形式のストリングが指されている必要があります。

構文図を読むビジュアル構文図をスキップwhitespace +  – 00x0X数字

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 に設定されます。 strtoul() 関数は ULONG_MAX を戻し、 strtoull() 関数は ULONGLONG_MAX を戻します。

文字が変換されなかった場合、strtoull() 関数は errno を EINVAL に設定し、0 が戻されます。 strtoul() 関数は 0 を戻しますが、errno を EINVAL に設定しません。 どちらの場合も、 endptr が指す値は、 nptr パラメーターの値に設定されます。 正常終了の場合は、 両方の関数が変換済みの値を戻します。

この例では、ストリングを符号なし long 値に変換します。 変換済みの値、 および変換を停止したサブストリングを出力します。
#include <stdio.h>
#include <stdlib.h>
 
#define BASE 2
 
int main(void)
{
   char *string, *stopstring;
   unsigned long ul;
 
   string = "1000e13 e";
   printf("string = %s\n", string);
   ul = strtoul(string, &stopstring, BASE);
   printf("   strtoul = %ld (base %d)\n", ul, BASE);
   printf("   Stopped scan at %s\n\n", stopstring);
}
 
/*****************  Output should be similar to:  *****************
 
string = 1000e13 e
   strtoul = 8 (base 2)
   Stopped scan at e13 e
*/

関連情報