strtoimax (C99)

文字列を intmax_t 型に変換します.

#include <inttypes.h>
intmax_t strtoimax(
    const char * restrict nptr,
    char ** restrict  endptr,
    int base
);

strtoimax 関数は nptr が指す文字列のはじめの数字の部分を,base で指定された基数で intmax_t 型の表現に変換します.nptr が指す文字列中に変換不可能な文字があった場合には,その文字列へのポインタを endptr に格納します.

機能がよく似た関数に,strtoumax 関数があります.

引数

  • nptr: 変換する文字列 ※1
  • endptr: 変換出来ない文字列を格納 ※2
  • base: 基数 ※3

※1 指定可能なフォーマットは以下の通りです.([ ]で囲まれたところは省略可能です)

  • 16 進数以外: [符号 (+ or -)] 空でない数字の列
  • 16 進数: [符号 (+ or -)] [0x or 0X] 空でない 16 進数の列

※2 空ポインタ (NULL) を指定した場合は格納されません.

※3 指定可能なフォーマットは以下の通りです.

  • 0 を指定した場合: 数字の列の先頭を見て基数を自動的に決める.
    • 数字の列の先頭が 0: 8 進数
    • 数字の列の先頭が 0x (0X でも OK): 16 進数
    • 上記以外: 10 進数
  • 2 〜 36 を指定した場合: 指定した基数になる.

戻り値

  • 変換が可能な場合: 変換した値
  • 変換が不可能な場合: 0
  • 正しい値が表現可能な値の範囲外: INTMAX_MIN or INTMAX_MAX or UINTMAX_MAX
    (errno に ERANGE の値を格納)

C言語サンプルプログラム

以下に strtoimax 関数を使用して,文字列を intmax_t 型に変換するサンプルプログラムを示します.

/* header files */
#include <stdio.h>
#include <stdlib.h>
#include <inttypes.h>

/* main */
int main(void) {
    char *number10 = "+255";  /* 10進数255 */
    char *number16 = "+0xff"; /* 16進数255 */
    char *number8 = "+377";   /*  8進数255 */
    char *mix = "-10snoopy";
    char *error = "snoopy-10";
    char *endptr;
    intmax_t x;

    /* 10進数 数値のみ */
    x = strtoimax(number10, &endptr, 0);
    printf("x = %"PRIdMAX", endptr = %s\n", x, endptr);

    /* 16進数 数値のみ */
    x = strtoimax(number16, &endptr, 0);
    printf("x = %"PRIdMAX", endptr = %s\n", x, endptr);

    /* 8進数 数値のみ */
    x = strtoimax(number8, &endptr, 8);
    printf("x = %"PRIdMAX", endptr = %s\n", x, endptr);

    /* 10進数 数値 + 文字列 */
    x = strtoimax(mix, &endptr, 0);
    printf("x = %"PRIdMAX", endptr = %s\n", x, endptr);

    /* 10進数 文字列 + 数値 */
    x = strtoimax(error, &endptr, 0);
    printf("x = %"PRIdMAX", endptr = %s\n", x, endptr);

    return EXIT_SUCCESS;
}

実行例

サンプルプログラムの実行結果は以下のようになります.

x = 255, endptr = 
x = 255, endptr = 
x = 255, endptr = 
x = -10, endptr = snoopy
x = 0, endptr = snoopy-10

Cプログラマの必読書

たくさんあるC言語関連の書籍の中でも特に役に立った本です.よかったら参考にしてみてください.

C実践プログラミング 第3版

C言語の実践的参考書.少々値段は張りますが初心者を脱しようとしている人は絶対に読むべきです.
文法だけでなく,コーディングスタイルやデバッグなど文字通り「実践的」なことが書かれているので非常にためになります. オライリーの本は,読みにくい本が多いのですが本書はとても読みやすくオススメです.


C言語ポインタ完全制覇 (標準プログラマーズライブラリ)

ポインタの解説書としては最高の書籍です.
この1冊でポインタを完全に理解することができます.全くの初学者が読むには敷居が高いですが,入門書を読み終えた後に読むと非常に有益です.