double strtod(const char *nptr, char **endptr);
float strtof(const char *nptr, char **endptr);
long double strtold(const char *nptr, char **endptr);
glibc 向けの機能検査マクロの要件 (feature_test_macros(7) 参照):
strtof(), strtold(): _XOPEN_SOURCE >= 600 || _ISOC99_SOURCE; or cc -std=c99
入力する文字列 (の先頭部分) は以下の形式が期待されている。 先頭にホワイトスペース、 次にプラス ('+') またはマイナス ('-') の記号、 その後に (i) 10 進数、(ii) 16 進数、(iii) 無限、 (iv) NAN (計算できない数、not-a-number) のいずれかがある (ホワイトスペース、符号は省略可能。 ホワイトスペースは isspace(3) で識別される)。
10 進数 は 1 文字以上の 10 進の数字の列からなり、 基を表す文字 (radix charater) (小数点。ロケールに依存するが、通常は '.') が含まれることもある。 この後に 10 進の指数部が続いても良い。 10 進の指数部は 'E' または 'e' と、その後に置かれる正負記号 (省略可)、 およびその後に続く 1 文字以上の 10 進の数字の列からなり、 10 の何乗であるかを表す。
16 進数 は、"0x" または "0X" とその後に続く 1 文字以上の 16 進の数字の列からなり、 基を表す文字が含まれることもある。 この後に 2 進の指数部が続いても良い。 2 進の指数部は 'P' または 'p' と、その後に置かれる正負記号 (省略可)、 およびその後に続く 1 文字以上の 10 進の数字の列から構成され、 2 の何乗であるかを表す。 基を表す文字と 2 進の指数部は、どちらか一方しか存在してはならない。
無限 は "INF" または "INFINITY" で表され、大文字小文字は区別されない。
NAN は "NAN" (大文字小文字は区別されない) で表され、 その後に '(' 文字列 ')' が続く場合もある。 この文字列は実装に依存する NAN を指定する。
endptr が NULL でないときは、変換に使われた最終文字の次の文字へのポインターが endptr で参照される場所へ保存される。
変換が行われなかったときには 0 が返る。そして endptr が参照している場所に nptr の値 (変換対象である文字列の開始アドレス) が保存される。
正しい形式の数値文字列であるが、変換結果がオーバーフローを起こした場合 には、プラスまたはマイナスの HUGE_VAL (HUGE_VALF, HUGE_VALL) が返り (値の符号による)、 ERANGE が errno に代入される。変換結果がアンダーフローを起こした場合には 0 が返り、 ERANGE が errno に代入される。