Namespaces
Variants

strtof, strtod, strtold

From cppreference.net
< c ‎ | string ‎ | byte
Definiert in Header <stdlib.h>
float strtof ( const char * restrict str, char ** restrict str_end ) ;
(1) (seit C99)
(2)
double strtod ( const char * str, char ** str_end ) ;
(bis C99)
double strtod ( const char * restrict str, char ** restrict str_end ) ;
(seit C99)
long double strtold ( const char * restrict str, char ** restrict str_end ) ;
(3) (seit C99)

Interpretiert einen Gleitkommawert in der Byte-Zeichenkette, auf die str zeigt.

Die Funktion verwirft alle Leerzeichen (wie durch isspace bestimmt), bis das erste Nicht-Leerzeichen gefunden wird. Dann nimmt sie so viele Zeichen wie möglich, um eine gültige Gleitkommadarstellung zu bilden, und wandelt diese in einen Gleitkommawert um. Der gültige Gleitkommawert kann einer der folgenden sein:

  • Dezimale Gleitkomma-Ausdrücke. Es besteht aus den folgenden Teilen:
  • (optional) Plus- oder Minuszeichen
  • Nichtleere Folge von Dezimalziffern, optional mit Dezimaltrennzeichen (wie durch die aktuelle C- Locale bestimmt) (definiert die Signifikande)
  • (optional) e oder E gefolgt von optionalem Minus- oder Pluszeichen und nichtleerer Folge von Dezimalziffern (definiert den Exponenten zur Basis 10 )
  • hexadezimale Gleitkomma-Ausdrücke. Besteht aus folgenden Teilen:
  • (optional) Plus- oder Minuszeichen
  • 0x oder 0X
  • nicht-leere Folge hexadezimaler Ziffern, optional mit Dezimaltrennzeichen (gemäß der aktuellen C- Locale ) (definiert die Signifikante)
  • (optional) p oder P gefolgt von optionalem Minus- oder Pluszeichen und nicht-leerer Folge dezimaler Ziffern (definiert Exponent zur Basis 2 )
  • Unendlichkeits-Ausdrücke. Besteht aus folgenden Teilen:
  • (optional) Plus- oder Minuszeichen
  • INF oder INFINITY Groß-/Kleinschreibung wird ignoriert
  • Not-a-Number-Ausdrücke. Besteht aus folgenden Teilen:
  • (optional) Plus- oder Minuszeichen
  • NAN oder NAN( char_sequence  ) Groß-/Kleinschreibung des NAN Teils wird ignoriert. char_sequence darf nur Ziffern, lateinische Buchstaben und Unterstriche enthalten. Das Ergebnis ist ein stiller NaN-Gleitkommawert.
(seit C99)
  • jeder andere Ausdruck, der von der aktuell installierten C locale akzeptiert werden kann.

Die Funktion setzt den Zeiger, auf den str_end zeigt, so, dass er auf das Zeichen nach dem letzten interpretierten Zeichen zeigt. Wenn str_end ein Nullzeiger ist, wird er ignoriert.

Inhaltsverzeichnis

Parameter

str - Zeiger auf den zu interpretierenden nullterminierten Byte-String
str_end - Zeiger auf einen Zeiger auf ein Zeichen

Rückgabewert

Fließkommawert, der dem Inhalt von str bei Erfolg entspricht. Falls der konvertierte Wert außerhalb des Bereichs des entsprechenden Rückgabetyps liegt, tritt ein Bereichsfehler auf ( errno wird auf ERANGE gesetzt) und HUGE_VAL , HUGE_VALF oder HUGE_VALL wird zurückgegeben. Falls keine Konvertierung durchgeführt werden kann, wird 0 zurückgegeben.

Beispiel

#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
    // parsing with error handling
    const char* p = "111.11 -2.22 Nan nan(2) inF 0X1.BC70A3D70A3D7P+6  1.18973e+4932zzz";
    printf("Parsing '%s':\n", p);
    char* end = NULL;
    for (double f = strtod(p, &end); p != end; f = strtod(p, &end))
    {
        printf("'%.*s' -> ", (int)(end - p), p);
        p = end;
        if (errno == ERANGE)
        {
            printf("range error, got ");
            errno = 0;
        }
        printf("%f\n", f);
    }
    // parsing without error handling
    printf("\"  -0.0000000123junk\"  -->  %g\n", strtod("  -0.0000000123junk", NULL));
    printf("\"junk\"                 -->  %g\n", strtod("junk", NULL));
}

Mögliche Ausgabe:

Parsing '111.11 -2.22 Nan nan(2) inF 0X1.BC70A3D70A3D7P+6  1.18973e+4932zzz':
'111.11' -> 111.110000
' -2.22' -> -2.220000
' Nan' -> nan
' nan(2)' -> nan
' inF' -> inf
' 0X1.BC70A3D70A3D7P+6' -> 111.110000
'  1.18973e+4932' -> range error, got inf
"  -0.0000000123junk"  -->  -1.23e-08
"junk"                 -->  0

Referenzen

  • C23-Standard (ISO/IEC 9899:2024):
  • 7.22.1.3 Die Funktionen strtod, strtof und strtold (S.: TBD)
  • C17-Standard (ISO/IEC 9899:2018):
  • 7.22.1.3 Die Funktionen strtod, strtof und strtold (S: 249-251)
  • C11-Standard (ISO/IEC 9899:2011):
  • 7.22.1.3 Die Funktionen strtod, strtof und strtold (S: 342-344)
  • C99-Standard (ISO/IEC 9899:1999):
  • 7.20.1.3 Die strtod-, strtof- und strtold-Funktionen (S: 308-310)
  • C89/C90 Standard (ISO/IEC 9899:1990):
  • 4.10.1.4 Die strtod-Funktion

Siehe auch

wandelt eine Byte-Zeichenkette in einen Gleitkommawert um
(Funktion)
(C99) (C95) (C99)
wandelt eine Breitzeichen-Zeichenkette in einen Gleitkommawert um
(Funktion)
C++-Dokumentation für strtof , strtod , strtold