The ‘str’ functions are declared in stdlib.h and those
beginning with ‘wcs’ are declared in wchar.h. One might
wonder about the use of restrict
in the prototypes of the
functions in this section. It is seemingly useless but the ISO C
standard uses it (for the functions defined there) so we have to do it
as well.
double
strtod (const char *restrict string, char **restrict tailptr)
¶Preliminary: | MT-Safe locale | AS-Safe | AC-Safe | See POSIX Safety Concepts.
The strtod
(“string-to-double”) function converts the initial
part of string to a floating-point number, which is returned as a
value of type double
.
This function attempts to decompose string as follows:
isspace
function
(see Classification of Characters). These are discarded.
The hexadecimal format is as follows:
*tailptr
.
If the string is empty, contains only whitespace, or does not contain an
initial substring that has the expected syntax for a floating-point
number, no conversion is performed. In this case, strtod
returns
a value of zero and the value returned in *tailptr
is the
value of string.
In a locale other than the standard "C"
or "POSIX"
locales,
this function may recognize additional locale-dependent syntax.
If the string has valid syntax for a floating-point number but the value
is outside the range of a double
, strtod
will signal
overflow or underflow as described in Error Reporting by Mathematical Functions.
strtod
recognizes four special input strings. The strings
"inf"
and "infinity"
are converted to ∞,
or to the largest representable value if the floating-point format
doesn’t support infinities. You can prepend a "+"
or "-"
to specify the sign. Case is ignored when scanning these strings.
The strings "nan"
and "nan(chars…)"
are converted
to NaN. Again, case is ignored. If chars… are provided, they
are used in some unspecified fashion to select a particular
representation of NaN (there can be several).
Since zero is a valid result as well as the value returned on error, you
should check for errors in the same way as for strtol
, by
examining errno
and tailptr.
float
strtof (const char *string, char **tailptr)
¶long double
strtold (const char *string, char **tailptr)
¶Preliminary: | MT-Safe locale | AS-Safe | AC-Safe | See POSIX Safety Concepts.
These functions are analogous to strtod
, but return float
and long double
values respectively. They report errors in the
same way as strtod
. strtof
can be substantially faster
than strtod
, but has less precision; conversely, strtold
can be much slower but has more precision (on systems where long
double
is a separate type).
These functions have been GNU extensions and are new to ISO C99.
_FloatN
strtofN (const char *string, char **tailptr)
¶_FloatNx
strtofNx (const char *string, char **tailptr)
¶Preliminary: | MT-Safe locale | AS-Safe | AC-Safe | See POSIX Safety Concepts.
These functions are like strtod
, except for the return type.
They were introduced in ISO/IEC TS 18661-3 and are available on machines that support the related types; see Mathematics.
double
wcstod (const wchar_t *restrict string, wchar_t **restrict tailptr)
¶float
wcstof (const wchar_t *string, wchar_t **tailptr)
¶long double
wcstold (const wchar_t *string, wchar_t **tailptr)
¶_FloatN
wcstofN (const wchar_t *string, wchar_t **tailptr)
¶_FloatNx
wcstofNx (const wchar_t *string, wchar_t **tailptr)
¶Preliminary: | MT-Safe locale | AS-Safe | AC-Safe | See POSIX Safety Concepts.
The wcstod
, wcstof
, wcstol
, wcstofN
,
and wcstofNx
functions are equivalent in nearly all aspects
to the strtod
, strtof
, strtold
,
strtofN
, and strtofNx
functions, but they
handle wide character strings.
The wcstod
function was introduced in Amendment 1 of ISO C90. The wcstof
and wcstold
functions were introduced in
ISO C99.
The wcstofN
and wcstofNx
functions are not in
any standard, but are added to provide completeness for the
non-deprecated interface of wide character string to floating-point
conversion functions. They are only available on machines that support
the related types; see Mathematics.
double
atof (const char *string)
¶Preliminary: | MT-Safe locale | AS-Safe | AC-Safe | See POSIX Safety Concepts.
This function is similar to the strtod
function, except that it
need not detect overflow and underflow errors. The atof
function
is provided mostly for compatibility with existing code; using
strtod
is more robust.
The GNU C Library also provides ‘_l’ versions of these functions, which take an additional argument, the locale to use in conversion.
See also Parsing of Integers.