strtod
strtod (string to double) とは、引数の文字列をdouble
型に変換するC言語の標準Cライブラリの関数である。stdlib.h
に定義されている。
形式[編集]
#include <stdlib.h>
double strtod(const char *nptr, char **endptr);
C99以降は以下のようなプロトタイプである。
double strtod(const char * restrict nptr, char ** restrict endptr);
機能[編集]
引数[編集]
第1引数nptr
の文字列では、+
もしくは-
の後に、以下のものを続けて書くことができる。
符号は省略することもできる。
また、INF
の代わりにINFINITY
と書くこともできる。
INF
はその前が+
ならば正の無限大に、-
ならば負の無限大になる。
第2引数endptr
がNULL
でない場合、endptr
が指しているアドレスに変換終了位置へのポインタが保存される。
戻り値[編集]
変換が成功した場合、変換した値を返す。
変換に失敗した場合、0
を返す。
正しい値がオーバーフローを起こす場合、その値の符号に応じて正もしくは負のHUGE_VAL
を返し、errno
にERANGE
が代入される。
正しい値がアンダーフローを起こす場合、絶対値がdouble
型の中で最も小さく正規化された正の数DBL_MIN
以下であるような値(一般的な実装では0
)を返す。errno
にERANGE
が代入されるかどうかは実装定義である[注釈 1]。
strtof[編集]
C99以降は、戻り値がfloat
型で、オーバーフロー時には正または負のHUGE_VALF
を返すstrtof
も規定されている。
#include <stdlib.h>
float strtof(const char * restrict nptr, char ** restrict endptr);
strtold[編集]
C99以降は、戻り値がlong double
型で、オーバーフロー時には正または負のHUGE_VALL
を返すstrtold
も規定されている。
#include <stdlib.h>
long double strtold(const char * restrict nptr, char ** restrict endptr);
atof[編集]
同様の機能を持つ標準関数にatofがあるが、こちらはエラーが発生した場合の動作が規定されておらず、strtodと比べて堅牢性に欠けるため、atofを非推奨としているガイドラインもある[1]。
脚注[編集]
注釈[編集]
- ^ ISO/IEC 9899:1999の「7.20.1.3 The strtod, strtof, and strtold functions」を参照のこと。