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の文字列では、+もしくは-の後に、以下のものを続けて書くことができる。
10進数
16進数（C99以降）
INF
NAN
符号は省略することもできる。

また、INFの代わりにINFINITYと書くこともできる。
INFはその前が+ならば無限大に、-ならば無限小になる。

第2引数endptrがNULLでない場合、endptrが指しているアドレスに変換終了位置へのポインタが保存される。

戻り値 
変換が成功した場合、変換した値を返す。

変換に失敗した場合、0を返す。

正しい値がオーバーフローを起こす場合、その値の符号に応じて正もしくは負のHUGE_VALを返し、errnoにERANGEが代入される。

正しい値がアンダーフローを起こす場合、絶対値がdouble型の中で最も小さく正規化された正の数DBL_MIN以下であるような値（一般的な実装では0）を返す。errnoにERANGEが代入されるかどうかは実装定義である。

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を非推奨としているガイドラインもある。

脚注

注釈

出典

関連項目 
 C言語
 標準Cライブラリ
 atof

外部リンク 
 strtof, strtod, strtold - cppreference.com
 strtod(3) - Linux man page
 strtod(3) | FreeBSD Manual Pages
 strtod, _strtod_l, wcstod, _wcstod_l | Microsoft Learn

標準Cライブラリ