====== strtod() ====== strtod ist definiert in der ''[[start|stdlib]]'', die in C über ''stdlib.h'', bzw. in C++ über ''cstdlib'' eingebunden wird. ===== Funktion ===== strtod konvertiert einen ASCII-String in einen Fließkommawert doppelter Breite (String to double - strtod). Zunächst werden sämtliche Whitespaces (Leerzeichen, Tabs) übersprungen, bis die ersten Ziffern (oder der '.') gefunden werden. Es darf ein + bzw. - der Zahl vorangestellt sein. Optional kann ein Exponent angegeben Wert ('e' bzw. 'E', gefolgt von + bzw. - und dem Exponenten zur Basis 10) Werden Zeichen gefunden, die nicht interpretiert werden können, so wird die Konvertierung abgebrochen und die bisher interpretierte Zahl zurückgegeben, sowie die Adresse des Zeichens, das nicht mehr als Ziffer gelesen werden konnte. Somit lassen sich sehr einfach hintereinanderstehende Zahlen einlesen. Gültige Strings wären z.B. " 123", "+1232", "-42". ===== Signatur ===== #include double strtod( char const * str, char ** endptr ); **str**: der zu konvertierende String \\ **endptr**: Adresse einer Zeigervariablen, die auf das zuletzt gelesene Zeichen zeigt, also das Zeichen, das nicht mehr einer Zahl gehört oder NULL\\ \\ **Return value**: die konvertierte Zahl als vorzeichenbehafteter, breiter Integerwert ===== Bemerkungen ===== Konnte keine Zahl konvertiert werden, weil der String leer oder aus nicht interpretierbaren Zeichen bestand (z.B. "abc"), so wird 0.0 zurückgegeben. Ist die zu konvertierende Zahl so groß, dass sie nicht dargestellt werden kann, so wird [[HUGE_VAL]] mit entsprechendem Vorzeichen zurückgegeben und [[c:lib:errno:errno]] wird auf [[c:lib:errno:ERANGE]] gesetzt. Die Umkehrfunktion, also einen ''double''-Wert in einen ASCII-String zu konvertierten, ist über [[c:lib:stdio:sprintf()]] möglich. ===== Beispiel ===== #include #include int main( void ) { char const * str = "-1234.5678 47.11E+2 Hallo"; double value1, value2; char * succ; value1 = strtod( str, &succ ); value2 = strtod( succ, &succ ); printf( "Wert des Strings \"%s\": 1 => %f 2 => %f\nEs folgt: \'%s'\n", str, value1, value2, succ ); return EXIT_SUCCESS; } Ausgabe: Wert des Strings "-1234.5678 47.11E+2 Hallo": 1 => -1234.567800 2 => 4711.000000 Es folgt: ' Hallo' ===== siehe auch ===== [[start|strlib]]: [[strtol()]], [[strtoul()]], [[atol()]], [[atof()]], [[atoi()]] \\ [[c:lib:stdio::start|stdio]]: [[c:lib:stdio:sprintf()]]