strtod(3) konvertiert eine ASCII-Zeichenkette in eine Fließkommazahl

ÜBERSICHT

#include <stdlib.h>

double strtod(const char *nptr, char **endptr);
float strtof(const char *nptr, char **endptr);
long double strtold(const char *nptr, char **endptr);

Mit Glibc erforderliche Makros (siehe feature_test_macros(7)):

strtof(), strtold():

_ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L

BESCHREIBUNG

Die Funktionen strtod(), strtof(), and strtold() wandeln den ersten Teil der Zeichenkette, auf die nptr zeigt, in die entsprechende double-, float- und long double-Darstellung um.

Es wird die folgende Form (des Anfangs) der Zeichenkette erwartet : optionale Leerzeichen, wie sie vonisspace(3) erkannt werden, ein optionales Plus- '+') oder Minus-Zeichen ('-') und dann entweder (i) eine Dezimalzahl oder (ii) eine Hexadezimalzahl oder (iii) ein unendlicher Wert oder (iv) keine Zahl (ein NAN, not-a-number).

Eine Dezimalzahl besteht aus einer nicht leeren Folge von Dezimalziffern, die möglicherweise ein Radix-Zeichen enthält (Dezimalpunkt, von der Locale abhängig, meistens '.'), optional gefolgt von einem dezimalen Exponenten. Ein dezimaler Exponent besteht aus einem 'E' oder 'e', gefolgt von einer nicht leeren Folge von Dezimalziffern. Er bedeutet eine Multiplikation mit einer Potenz von 10.

Eine Hexadezimalzahl besteht aus einem »0x« oder »0X« gefolgt von einer nicht leeren Folge von Hexadezimalziffern (die vielleicht ein Radix-Zeichen enthält), der optional ein binärer Exponent folgt. Ein binärer Exponent besteht aus einem 'P' oderr 'p', gefolgt von einem optionalen Plus- oder Minuszeichen, gefolgt von einer nicht leeren Folge von Dezimalziffern, die für die Multiplikation mit einer Potenz von 2 steht. Mindestens ein Radix-Zeichen und ein binärer Exponent müssen vorhanden sein.

Ein unendlicher Wert ist ungeachtet der Gross- oder Kleinschreibung entweder »INF« oder »INFINITY«.

Ein NAN ist (ungeachtet der Groß- oder Kleinschreibung) ein »NAN«, optional gefolgt von einer Zeichenkette (n-char-sequence). Die Zeichenfolge beschreibt auf implementationsabhängige Weise den Typ des NaNs (siehe ANMERKUNGEN).

RÜCKGABEWERT

Diese Funktionen liefern den umgewandelten Wert zurück, wenn er existiert.

Wenn endptr nicht NULL ist, wird an dem durch endptr bestimmten Ort ein Zeiger auf das erste Zeichen gespeichert, das nicht mehr zur Konvertierung herangezogen wurde.

Wenn keine Konvertierung stattgefunden hat, wird 0 zurückgeliefert und (falls endptr nicht Null ist) der Wert von nptr wird am Ort gespeichert, auf den endptr weist.

Falls der korrekte Wert einen Überlauf verursacht, wird plus oder minus HUGE_VAL (HUGE_VALF, HUGE_VALL) zurückgegeben (abhängig vom Vorzeichen des Wertes) und ERANGE wird in errno gespeichert. Verursacht der korrekte Werte eine Bereichsunterschreitung, wird 0 zurückgegeben und ERANGE wird in errno gespeichert.

FEHLER

ERANGE
Überlauf oder Bereichsunterschreitung aufgetreten

ATTRIBUTE

Siehe attributes(7) für eine Erläuterung der in diesem Abschnitt verwandten Ausdrücke.
SchnittstelleAttributWert
strtod(), strtof(), strtold() Multithread-FähigkeitMT-Safe locale

KONFORM ZU

POSIX.1-2001, POSIX.1-2008, C99.

strtod() wurde auch in C89 beschrieben.

ANMERKUNGEN

Da 0 ein legitimer Rückgabewert sowohl bei Erfolg als auch bei Misserfolg zurückgegeben werden kann, sollte das aufrufende Programm errno vor dem Aufruf auf 0 setzen und nach dem Aufruf prüfen, ob errno einen Wert ungleich Null hat.

In der Glibc-Implementierung wird die n-char-sequence, der optional ein »NAN« folgt, als Ganzzahl interpretiert (mit einem optionalen Präfix »0« oder »0x«, um entweder 8 oder 16 als Basis zu wählen), die in die Mantissen-Komponente des zurückgegebenen Wertes gesetzt wird.

BEISPIEL

Siehe das Beispiel in der Handbuchseite von strtol(3); die Verwendung der in dieser Handbuchseite beschriebenen Funktionen ist ähnlich.

KOLOPHON

Diese Seite ist Teil der Veröffentlichung 4.06 des Projekts Linux-man-pages. Eine Beschreibung des Projekts, Informationen, wie Fehler gemeldet werden können sowie die aktuelle Version dieser Seite finden sich unter https://www.kernel.org/doc/man-pages/.

ÜBERSETZUNG

Die deutsche Übersetzung dieser Handbuchseite wurde von Martin Eberhard Schauer <[email protected]> und Mario Blättermann <[email protected]> erstellt.

Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen.

Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an <[email protected]>.