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():
入力する文字列 (の先頭部分) は以下の形式が期待されている。 先頭にホワイトスペース、 次にプラス ('+') またはマイナス ('-') の記号、 その後に (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" (大文字小文字は区別されない) で表され、 その後に文字列 (n-char-sequence) が続く場合もある。 (n-char-sequence) は実装に依存する NAN の型を指定する。
endptr が NULL でないときは、変換に使われた最終文字の次の文字へのポインターが endptr で参照される場所へ保存される。
If no conversion is performed, zero is returned and (unless endptr is null) the value of nptr is stored in the location referenced by endptr.
If the correct value would cause overflow, plus or minus HUGE_VAL, HUGE_VALF, or HUGE_VALL is returned (according to the return type and sign of the value), and ERANGE is stored in errno.
If the correct value would cause underflow, a value with magnitude no larger than DBL_MIN, FLT_MIN, or LDBL_MIN is returned and ERANGE is stored in errno.
インターフェース | 属性 | 値 |
strtod(), strtof(), strtold() | Thread safety | MT-Safe locale |
strtod() was also described in C89.
glibc の実装では、"NAN" の後ろに置くことができる n-char-sequence は、整数値として解釈される (基数の 8 や 16 を示す '0' や '0x' を接頭辞として付けることができる)。 この整数値は返り値の仮数部として使われる。