| Functions | |||||||||||||||||||||||||||||||||||||||||
| Character manipulation | |||||||||||||||||||||||||||||||||||||||||
| Conversions to and from numeric formats | |||||||||||||||||||||||||||||||||||||||||
|
| ||||||||||||||||||||||||||||||||||||||||
| String manipulation | |||||||||||||||||||||||||||||||||||||||||
|
| ||||||||||||||||||||||||||||||||||||||||
| String examination | |||||||||||||||||||||||||||||||||||||||||
| Memory manipulation | |||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||
| Miscellaneous | |||||||||||||||||||||||||||||||||||||||||
(C11)(C11) | |||||||||||||||||||||||||||||||||||||||||
Defined in header <stdlib.h> | ||
float strtof(constchar*restrict str,char**restrict str_end); | (1) | (since C99) |
| (2) | ||
double strtod(constchar* str,char** str_end); | (until C99) | |
double strtod(constchar*restrict str,char**restrict str_end); | (since C99) | |
longdouble strtold(constchar*restrict str,char**restrict str_end); | (3) | (since C99) |
Interprets a floating-point value in a byte string pointed to bystr.
Function discards any whitespace characters (as determined byisspace) until first non-whitespace character is found. Then it takes as many characters as possible to form a valid floating-point representation and converts them to a floating-point value. The valid floating-point value can be one of the following:
e orE followed with optional minus or plus sign and nonempty sequence of decimal digits (defines exponent to base10)
| (since C99) |
The functions sets the pointer pointed to bystr_end to point to the character past the last character interpreted. Ifstr_end is a null pointer, it is ignored.
Contents |
| str | - | pointer to the null-terminated byte string to be interpreted |
| str_end | - | pointer to a pointer to character |
Floating-point value corresponding to the contents ofstr on success. If the converted value falls out of range of corresponding return type, range error occurs (errno is set toERANGE) andHUGE_VAL,HUGE_VALF orHUGE_VALL is returned. If no conversion can be performed,0 is returned.
#include <errno.h>#include <stdio.h>#include <stdlib.h> int main(void){// parsing with error handlingconstchar* 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 handlingprintf("\" -0.0000000123junk\" --> %g\n", strtod(" -0.0000000123junk",NULL));printf("\"junk\" --> %g\n", strtod("junk",NULL));}
Possible output:
Parsing '111.11 -2.22 Nan nan(2) inF 0X1.BC70A3D70A3D7P+6 1.18973e+4932zzz':'111.11' -> 111.110000' -2.22' -> -2.220000' Nan' -> nan' nan(2)' -> nan' inF' -> inf' 0X1.BC70A3D70A3D7P+6' -> 111.110000' 1.18973e+4932' -> range error, got inf" -0.0000000123junk" --> -1.23e-08"junk" --> 0
| converts a byte string to a floating-point value (function)[edit] | |
(C99)(C95)(C99) | converts a wide string to a floating-point value (function)[edit] |
C++ documentation forstrtof,strtod,strtold | |