strtod - konvertiert eine ASCII-Zeichenkette in eine Fließkommazahl
Standard-C-Bibliothek (
libc,
-lc)
#include <stdlib.h>
double strtod(const char *restrict nptr, char **restrict endptr);
float strtof(const char *restrict nptr, char **restrict endptr);
long double strtold(const char *restrict nptr, char **restrict endptr);
strtof(),
strtold():
_ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
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 von
isspace(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' oder '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).
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 oder
HUGE_VALL zurückgegeben
(abhängig vom Typ Vorzeichen des Wertes) und
ERANGE wird in
errno gespeichert.
Verursacht der korrekte Werte eine Bereichsunterschreitung, wird ein Wert
zurückgegeben, der nicht größer als
DBL_MIN,
FLT_MIN oder
LDBL_MIN ist und
ERANGE wird in
errno
gespeichert.
- ERANGE
- Überlauf oder Bereichsunterschreitung
aufgetreten
Siehe
attributes(7) für eine Erläuterung der in diesem
Abschnitt verwandten Ausdrücke.
Schnittstelle |
Attribut |
Wert |
strtod(), strtof(), strtold() |
Multithread-Fähigkeit |
MT-Safe locale |
POSIX.1-2001, POSIX.1-2008, C99.
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.
Siehe das Beispiel in der Handbuchseite
strtol(3); die Verwendung der in
dieser Handbuchseite beschriebenen Funktionen ist ähnlich.
atof(3),
atoi(3),
atol(3),
nan(3),
nanf(3),
nanl(3),
strfromd(3),
strtol(3),
strtoul(3)
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 die
Mailingliste
der Übersetzer