Name
strtod, strtof, strtold - convert ASCII string to floating-point numberLibrary
Standard C library ( libc ", " -lc )Synopsis
#include <stdlib.h> double strtod(const char *restrict " nptr ", char **restrict endptr );
float strtof(const char *restrict " nptr ", char **restrict endptr );
long double strtold(const char *restrict nptr \
", char **restrict " endptr );
Feature Test Macro Requirements for glibc (see feature_test_macros(7)):
strtof() strtold()
_ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
Description
The strtod() strtof() and strtold() functions convert the initial portion of the string pointed to by nptr todouble
, float
, and long double representation, respectively. The expected form of the (initial portion of the) string is optional leading white space as recognized by isspace(3), an optional plus ('+') or minus sign ('-') and then either (i) a decimal number, or (ii) a hexadecimal number, or (iii) an infinity, or (iv) a NAN (not-a-number).
A "decimal number" consists of a nonempty sequence of decimal digits possibly containing a radix character (decimal point, locale-dependent, usually '.'), optionally followed by a decimal exponent. A decimal exponent consists of an 'E' or 'e', followed by an optional plus or minus sign, followed by a nonempty sequence of decimal digits, and indicates multiplication by a power of 10.
A "hexadecimal number" consists of a "0x" or "0X" followed by a nonempty sequence of hexadecimal digits possibly containing a radix character, optionally followed by a binary exponent. A binary exponent consists of a 'P' or 'p', followed by an optional plus or minus sign, followed by a nonempty sequence of decimal digits, and indicates multiplication by a power of 2. At least one of radix character and binary exponent must be present.
An infinity is either "INF" or "INFINITY", disregarding case.
A NAN is "NAN" (disregarding case) optionally followed by a string, (n-char-sequence)
, where n-char-sequence specifies in an implementation-dependent way the type of NAN (see NOTES).
Return Value
These functions return the converted value, if any.If endptr is not NULL, a pointer to the character after the last character used in the conversion is stored in the location referenced by 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
.
Errors
ERANGE Overflow or underflow occurred.
Attributes
For an explanation of the terms used in this section, see attributes(7).Interface | Attribute | Value |
T} | Thread safety | MT-Safe locale |
Versions
In the glibc implementation, the n-char-sequence that optionally follows "NAN" is interpreted as an integer number (with an optional '0' or '0x' prefix to select base 8 or 16) that is to be placed in the mantissa component of the returned value.Standards
C11, POSIX.1-2008.History
strtod() C89, POSIX.1-2001.
strtof() strtold() C99, POSIX.1-2001.