名前空間
変種
操作

strtoimax、strtoumax

From cppreference.com
< c‎ | string‎ | byte
ヘッダ <inttypes.h> で定義
intmax_t strtoimax( const char* restrict nptr,
                    char** restrict endptr, int base );
(1) (C99以降)
uintmax_t strtoumax( const char* restrict nptr,
                     char** restrict endptr, int base );
(2) (C99以降)

nptrが指すバイト文字列内の整数値を解釈します。

isspaceの呼び出しによって識別される空白文字をすべて破棄し、最初の空白でない文字が見つかるまでスキップします。次に、有効な基数n(n=base)の整数表現を形成するために可能な限り多くの文字を取得し、それらを整数値に変換します。有効な整数値は次の部分で構成されます。

  • (任意)プラスまたはマイナスの記号
  • (オプション) 8進数を表す接頭辞 (0) (基数が 8 または 0 の場合にのみ適用されます)
  • (オプション) 16進数を表す接頭辞 (0x または 0X) (基数が 16 または 0 の場合にのみ適用されます)
  • 数字のシーケンス

baseの有効な値のセットは{0, 2, 3, ..., 36}です。基数2の整数の有効な数字のセットは{0, 1}、基数3の整数は{0, 1, 2}などです。10より大きい基数では、有効な数字にはアルファベット文字が含まれ、基数11の整数ではAaから始まり、基数36の整数ではZzまでとなります。大文字・小文字は区別されません。

現在インストールされている C ロケール によって、追加の数値形式が受け入れられる場合があります。

base の値が 0 の場合、数値基数は自動検出されます。接頭辞が 0 の場合は基数は8進数、接頭辞が 0x または 0X の場合は基数は16進数、それ以外の場合は基数は10進数になります。

入力シーケンスにマイナス記号が含まれていた場合、数字シーケンスから計算された数値は、結果の型で単項マイナス を適用するかのように否定されます。

endptrが指すポインタは、解釈された最後の文字の次の文字を指すように設定されます。endptrがヌルポインタの場合、無視されます。

nptrが空であるか、期待される形式ではない場合、変換は実行されず、(endptrがヌルポインタでない場合)nptrの値はendptrが指すオブジェクトに格納されます。

目次

[編集] パラメータ

nptr - 解釈されるヌル終端バイト文字列へのポインタ
endptr - 文字へのポインタへのポインタ
base - 解釈される整数値の基数

[編集] 返り値

  • 成功した場合、strの内容に対応する整数値が返されます。
  • 変換された値が対応する戻り値の型の範囲を超える場合、範囲エラーが発生し(errnoERANGEが設定されます)、適切な値としてINTMAX_MAXINTMAX_MINUINTMAX_MAX、または0が返されます。
  • 変換が実行できない場合、0 が返されます。

[編集]

#include <errno.h>
#include <inttypes.h>
#include <stdio.h>
#include <string.h>
 
int main(void)
{
    char* endptr = NULL;
 
    printf("%ld\n", strtoimax(" -123junk", &endptr, 10)); // base 10
    printf("%ld\n", strtoimax("11111111", &endptr, 2));   // base 2
    printf("%ld\n", strtoimax("XyZ", &endptr, 36));       // base 36
    printf("%ld\n", strtoimax("010", &endptr, 0));        // octal auto-detection
    printf("%ld\n", strtoimax("10", &endptr, 0));         // decimal auto-detection
    printf("%ld\n", strtoimax("0x10", &endptr, 0));       // hexadecimal auto-detection
 
    // range error: LONG_MAX+1 --> LONG_MAX
    errno = 0;
    printf("%ld\n", strtoimax("9223372036854775808", &endptr, 10));
    printf("%s\n", strerror(errno));
}

出力

-123
255
44027
8
10
16
9223372036854775807
Numerical result out of range

[編集] 参考文献

  • C23標準 (ISO/IEC 9899:2024)
  • 7.8.2.3 strtoimaxおよびstrtoumax関数(p: TBD)
  • C17標準 (ISO/IEC 9899:2018)
  • 7.8.2.3 strtoimaxおよびstrtoumax関数(p: TBD)
  • C11標準 (ISO/IEC 9899:2011)
  • 7.8.2.3 strtoimaxおよびstrtoumax関数(p: 219)
  • C99標準 (ISO/IEC 9899:1999)
  • 7.8.2.3 strtoimaxおよびstrtoumax関数(p: 200)

[編集] 関連項目

intmax_tまたはuintmax_tにワイド文字列を変換します
(関数) [編集]
バイト文字列を整数値に変換する
(関数) [編集]
バイト文字列を符号なし整数値に変換する
(関数) [編集]
C++ ドキュメント (strtoimax, strtoumax)
English 日本語 中文(简体) 中文(繁體)