strtod()

strtod ist definiert in der 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 <stdlib.h>
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 errno wird auf ERANGE gesetzt.

Die Umkehrfunktion, also einen double-Wert in einen ASCII-String zu konvertierten, ist über sprintf() möglich.

Beispiel

#include <stdlib.h>
#include <stdio.h>
 
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