strtof, strtod, strtold
Header: <stdlib.h>
Interprets a floating-point value in a byte string pointed to by str.
# Declarations
float strtof ( const char* restrict str, char** restrict str_end );
(since C99)
double strtod ( const char* str, char** str_end );
(until C99)
double strtod ( const char* restrict str, char** restrict str_end );
(since C99)
long double strtold( const char* restrict str, char** restrict str_end );
(since C99)
# Parameters
str: pointer to the null-terminated byte string to be interpretedstr_end: pointer to a pointer to character
# Return value
Floating-point value corresponding to the contents of str on success. If the converted value falls out of range of corresponding return type, range error occurs (errno is set to ERANGE) and HUGE_VAL, HUGE_VALF or HUGE_VALL is returned. If no conversion can be performed, 0 is returned.
# Example
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
// parsing with error handling
const char* p = "111.11 -2.22 Nan nan(2) inF 0X1.BC70A3D70A3D7P+6 1.18973e+4932zzz";
printf("Parsing '%s':\n", p);
char* end = NULL;
for (double f = strtod(p, &end); p != end; f = strtod(p, &end))
{
printf("'%.*s' -> ", (int)(end - p), p);
p = end;
if (errno == ERANGE)
{
printf("range error, got ");
errno = 0;
}
printf("%f\n", f);
}
// parsing without error handling
printf("\" -0.0000000123junk\" --> %g\n", strtod(" -0.0000000123junk", NULL));
printf("\"junk\" --> %g\n", strtod("junk", NULL));
}