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

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

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


strtold関数

概要

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

ヘッダ

stdlib.h

形式

long double strtold(const char* restrict s, char** restrict endptr);

引数

s

対象の文字列。

endptr

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

戻り値

正常に変換された場合は、long double型に変換された結果。
変換結果が、表現可能な範囲を超えている場合は、正しい結果が正ならば +HUGE_VALL、負ならば -HUGE_VALL が返される。
変換結果が、アンダーフローを起こす場合には、long double型でもっとも小さな正規化された正の数以下の絶対値をもつ値を返す。
最初の文字の時点ですでに変換不能な場合、0 が返される。

詳細

文字列を浮動小数点数とみなし、long double型の値として返す。浮動小数点数として認識できない文字に行き当たると、その文字を指すポインタを引数endptr が指すポインタに渡す。引数endptr がヌルポインタの場合は、単に変換をその段階で中止する。
先頭に符号 “+” や “-” があっても構わない。
変換結果が、表現可能な範囲を超えている場合、errnoERANGE が格納される。また、アンダーフローを起こす場合に、errno に ERANGE を格納する処理系もある。

注意

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

使用例

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

int main(void)
{
    char* s = NULL;

    errno = 0;
    long double d = strtold("-50.7575abc", &s);
    if (errno != 0) {
        fputs("結果が表現できない\n", stderr);
        exit(EXIT_FAILURE);
    }

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

実行結果:

-50.757500
abc

関連

float型に変換する strtof関数、double型に変換する strtod関数がある。

以下のように、整数型に変換する関数がいくつかある。strtol関数は long型に、strtoul関数は unsigned long型に、strtoll関数は long long型に、strtoull関数は unsigned long long型に、それぞれ変換する。また、atoi関数atol関数atof関数は、それぞれ仕様が単純だが、エラー検出が行えない。

解説章

第45章


参考リンク


更新履歴

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

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

’2018/1/22 新規作成。



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

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

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

Programming Place Plus のトップページへ



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