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

# 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));
}

# See also