Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

strtod, strtof, strtold - Zeichenkette in Gleitkommazahl umwandeln

&pagelevel(4)&pagelevel

Definition

#include <stdlib.h>

double strtod(const char *s, char **zg);
float strtof(const char *s, char **zg);
long double strtold(const char *s, char **zg);

Diese Funktionen wandeln eine Zeichenkette, auf die s zeigt, in eine Gleitkommazahl um. Die umzuwandelnde Zeichenkette kann wie folgt aufgebaut sein:

[{tab|'BLANK'}...][+|-][Ziffer...][.][Ziffer...][{E|e}[+|-]Ziffer...]
oder
[{tab|'BLANK'}...][+|-]0{X|x}[ Hexziffer...][.][Hexziffer...][{P|p}[+|-]Ziffer...]

Für tab sind alle Steuerzeichen für „Zwischenraum“ zulässig (siehe Definition bei isspace).

strtod erkennt auch Zeichenketten, die mit Ziffern beginnen, dann aber mit beliebigen Zeichen enden. In diesem Fall schneidet strtod zunächst den Ziffernteil ab und wandelt ihn in einen Gleitkommawert um.

Wenn zg nicht als NULL-Zeiger übergeben wird, erhält man von strtod über das zweite Argument zg vom Typ char ** einen Zeiger (*zg) auf das erste nicht umwandelbare Zeichen in der Zeichenkette s. Wenn überhaupt keine Umwandlung möglich ist, wird *zg auf die Anfangsadresse der Zeichenkette s gesetzt.

Ist zg ein NULL-Zeiger, wird strtod wie die Funktion atof ausgeführt:

atof(s) enspricht strtod(s, (char **)NULL) oder auch strtod(s, NULL).

Returnwert

Gleitkommazahl vom Typ double, float oder long double



für Zeichenketten, die eine wie oben beschriebene Struktur haben und einen Zahlenwert darstellen, der im zulässigen Gleitkommabereich liegt.

 

0

für Zeichenketten, die nicht der oben beschriebenen Syntax entsprechen bzw. nicht mit umwandelbaren Zeichen beginnen.

 

+/-HUGE_VAL
+/-HUGE_VALF
+/-HUGE_VALL

abhängig vom Funktionstyp und Vorzeichen des Ergebnisses, für Zeichenketten, deren Zahlenwert außerhalb des zulässigen Gleitkommabereichs liegt.
Zusätzlich wird errno auf ERANGE gesetzt (Resultat zu groß).

Hinweis

Das Dezimalpunktzeichen (Punkt oder Komma) in der umzuwandelnden Zeichenkette wird durch die Lokalität (Kategorie LC_NUMERIC) beeinflusst. Voreingestellt ist der Punkt.

Beispiel

Folgendes Programm wandelt eine beim Aufruf (Enter Options) übergebene Zeichenkette in die entsprechende Gleitkommazahl um und gibt das erste ggf. nicht umwandelbare Zeichen aus.

#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
               /* Zahlen werden als Zeichenketten!! übergeben.
                  Eine Umwandlung ist erforderlich,
                  falls der Zahlenwert benötigt wird */
{
  char *p;
  printf("floating : %f\n", strtod(argv[1], &p));
  putchar(*p);
  return 0;
}

Siehe auch

atof, atoi, atol, strtol, strtoul