strtof, strtod, strtold
|
Défini dans l'en-tête
<stdlib.h>
|
||
|
float
strtof
(
const
char
*
restrict
str,
char
**
restrict
str_end
)
;
|
(1) | (depuis C99) |
| (2) | ||
|
double
strtod
(
const
char
*
str,
char
**
str_end
)
;
|
(jusqu'à C99) | |
|
double
strtod
(
const
char
*
restrict
str,
char
**
restrict
str_end
)
;
|
(depuis C99) | |
|
long
double
strtold
(
const
char
*
restrict
str,
char
**
restrict
str_end
)
;
|
(3) | (depuis C99) |
Interprète une valeur à virgule flottante dans la chaîne d'octets pointée par str .
La fonction ignore tous les caractères d'espacement (tels que déterminés par isspace ) jusqu'à ce que le premier caractère non-espace soit trouvé. Ensuite, elle prend autant de caractères que possible pour former une représentation valide en virgule flottante et les convertit en une valeur flottante. La valeur flottante valide peut être l'une des suivantes :
- expression décimale en virgule flottante. Elle se compose des parties suivantes :
-
- (optionnel) signe plus ou moins
- séquence non vide de chiffres décimaux contenant éventuellement un caractère de séparation décimale (tel que déterminé par la locale C actuelle) (définit la mantisse)
-
(optionnel)
eouEsuivi d'un signe moins ou plus optionnel et d'une séquence non vide de chiffres décimaux (définit l'exposant en base 10 )
|
(depuis C99) |
- toute autre expression qui peut être acceptée par la locale C actuellement installée locale .
Les fonctions définissent le pointeur pointé par str_end pour pointer vers le caractère suivant le dernier caractère interprété. Si str_end est un pointeur nul, il est ignoré.
Table des matières |
Paramètres
| str | - | pointeur vers la chaîne d'octets terminée par un caractère nul à interpréter |
| str_end | - | pointeur vers un pointeur de caractère |
Valeur de retour
Valeur à virgule flottante correspondant au contenu de str en cas de succès. Si la valeur convertie dépasse la plage du type de retour correspondant, une erreur de plage se produit ( errno est défini à ERANGE ) et HUGE_VAL , HUGE_VALF ou HUGE_VALL est retourné. Si aucune conversion ne peut être effectuée, 0 est retourné.
Exemple
#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)); }
Sortie possible :
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
Références
- Norme C23 (ISO/CEI 9899:2024) :
-
- 7.22.1.3 Les fonctions strtod, strtof et strtold (p: TBD)
- Norme C17 (ISO/CEI 9899:2018) :
-
- 7.22.1.3 Les fonctions strtod, strtof et strtold (p : 249-251)
- Norme C11 (ISO/IEC 9899:2011):
-
- 7.22.1.3 Les fonctions strtod, strtof et strtold (p: 342-344)
- Norme C99 (ISO/IEC 9899:1999) :
-
- 7.20.1.3 Les fonctions strtod, strtof et strtold (p: 308-310)
- Norme C89/C90 (ISO/IEC 9899:1990) :
-
- 4.10.1.4 La fonction strtod
Voir aussi
|
convertit une chaîne d'octets en une valeur à virgule flottante
(fonction) |
|
|
(C99)
(C95)
(C99)
|
convertit une chaîne large en une valeur à virgule flottante
(fonction) |
|
Documentation C++
pour
strtof
,
strtod
,
strtold
|
|