strtoull | Programming Place Plus C言語編 標準ライブラリのリファレンス

トップページC言語編標準ライブラリのリファレンス(名前順)

トップページC言語編標準ライブラリのリファレンス(ヘッダ別)


strtoull関数

概要

文字列を unsigned long long型に変換する。

ヘッダ

stdlib.h

形式

unsigned long long int strtoull(const char* restrict s, char** restrict endptr, int radix);

引数

s

対象の文字列。

endptr

変換できない最初の文字へのポインタを受け取るポインタ。不要であれば、ヌルポインタでも構わない。

radix

2~36 の範囲の基数。または 0。

戻り値

正常に変換された場合は、unsigned long long型に変換された結果。
変換結果が、表現可能な範囲を超えている場合は、ULLONG_MAX が返される。
最初の文字の時点ですでに変換不能な場合、0 が返される。

詳細

引数radix が 2~36 のいずれかであれば、s を radix で指定した基数の整数とみなし、unsigned long long型の値として返す。引数radix が 0 の場合には、先頭にある “0” や “0x”、“0X” という文字の並びに応じて、8進数、10進数、16進数のいずれかであるとみなし、やはり unsigned long long型の値として返す。
数として認識できない文字に行き当たると、その文字を指すポインタを引数endptr が指すポインタに渡す。引数endptr がヌルポインタの場合は、単に変換をその段階で中止する。
s の先頭に空白類文字が並んでいるとき、それらは無視される。続いて、符号 “+” や “-” があっても構わない。なお、整数定数の末尾に付ける L や u のようなサフィックスは認識しない。
変換結果が、表現可能な範囲を超えている場合、errnoERANGE が格納される。

注意

エラーの有無は errno によって調べなければならない。正常な変換によって 0 が得られる可能性があるため、戻り値だけで判定することは不可能である。

使用例

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <errno.h>

int main(void)
{
    const char* str = "3050abc";
    char* s = NULL;

    errno = 0;
    unsigned long long u = strtoull(str, &s, 10);
    if (u == ULLONG_MAX && errno == ERANGE) {
        fputs("結果が表現できない\n", stderr);
        exit(EXIT_FAILURE);
    }
    else if (str == s) {
        fputs("変換できなかった\n", stderr);
        exit(EXIT_FAILURE);
    }

    printf("%llu\n", u);
    if (s != NULL) {
        puts(s);
    }
}

実行結果:

3050
abc

関連

strtod関数は double型に、strtoll関数は long long型に変換できる。また、atoi関数atol関数atof関数は、それぞれ仕様が単純だが、エラー検出が行えない。
float型に変換する strtof関数、long double型に変換する strtold関数、long型に変換する strtol関数がある。

解説章

第45章


参考リンク


更新履歴

’2018/4/20 「NULL」という表記を「ヌルポインタ」に修正。

’2018/4/17 全体的に文章を見直し修正。

’2018/1/22 新規作成。



標準ライブラリのリファレンス(名前順)のトップページへ

標準ライブラリのリファレンス(ヘッダ別)のトップページへ

C言語編のトップページへ

Programming Place Plus のトップページへ



はてなブックマーク に保存 Pocket に保存 Facebook でシェア
X で ポストフォロー LINE で送る noteで書く
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー
先頭へ戻る