strtoimax, strtoumax
|
Défini dans l'en-tête
<inttypes.h>
|
||
|
intmax_t
strtoimax
(
const
char
*
restrict
nptr,
char ** restrict endptr, int base ) ; |
(1) | (depuis C99) |
|
uintmax_t
strtoumax
(
const
char
*
restrict
nptr,
char ** restrict endptr, int base ) ; |
(2) | (depuis C99) |
Interprète une valeur entière dans une chaîne d'octets pointée par nptr .
Ignore tous les caractères d'espacement (identifiés en appelant
isspace
) jusqu'à ce que le premier caractère non-espace soit trouvé, puis prend autant de caractères que possible pour former une représentation valide de nombre entier en
base-n
(où n=
base
) et les convertit en une valeur entière. La valeur entière valide se compose des parties suivantes :
- (optionnel) signe plus ou moins
-
(optionnel)
préfixe (
0) indiquant la base octale (s'applique uniquement lorsque la base est 8 ou 0 ) -
(optionnel)
préfixe (
0xou0X) indiquant la base hexadécimale (s'applique uniquement lorsque la base est 16 ou 0 ) - une séquence de chiffres
L'ensemble des valeurs valides pour la base est
{0, 2, 3, ..., 36}
. L'ensemble des chiffres valides pour les entiers en base
2
est
{0, 1}
, pour les entiers en base
3
est
{0, 1, 2}
, et ainsi de suite. Pour les bases supérieures à
10
, les chiffres valides incluent des caractères alphabétiques, commençant par
Aa
pour les entiers en base
11
, jusqu'à
Zz
pour les entiers en base
36
. La casse des caractères est ignorée.
Des formats numériques supplémentaires peuvent être acceptés par la locale C actuellement installée.
Si la valeur de
base
est
0
, la base numérique est auto-détectée : si le préfixe est
0
, la base est octale, si le préfixe est
0x
ou
0X
, la base est hexadécimale, sinon la base est décimale.
Si le signe moins faisait partie de la séquence d'entrée, la valeur numérique calculée à partir de la séquence de chiffres est niée comme si par un moins unaire dans le type de résultat.
Les fonctions définissent le pointeur pointé par endptr pour pointer vers le caractère suivant le dernier caractère interprété. Si endptr est un pointeur nul, il est ignoré.
Si le nptr est vide ou ne présente pas la forme attendue, aucune conversion n'est effectuée, et (si endptr n'est pas un pointeur nul) la valeur de nptr est stockée dans l'objet pointé par endptr .
Table des matières |
Paramètres
| nptr | - | pointeur vers la chaîne d'octets terminée par un caractère nul à interpréter |
| endptr | - | pointeur vers un pointeur de caractère |
| base | - | base de la valeur entière interprétée |
Valeur de retour
-
Si l'opération réussit, une valeur entière correspondant au contenu de
strest renvoyée. - Si la valeur convertie dépasse la plage du type de retour correspondant, une erreur de plage se produit (en définissant errno à ERANGE ) et INTMAX_MAX , INTMAX_MIN , UINTMAX_MAX ou 0 est renvoyé, selon le cas.
- Si aucune conversion ne peut être effectuée, 0 est renvoyé.
Exemple
#include <errno.h> #include <inttypes.h> #include <stdio.h> #include <string.h> int main(void) { char* endptr = NULL; printf("%ld\n", strtoimax(" -123junk", &endptr, 10)); // base 10 printf("%ld\n", strtoimax("11111111", &endptr, 2)); // base 2 printf("%ld\n", strtoimax("XyZ", &endptr, 36)); // base 36 printf("%ld\n", strtoimax("010", &endptr, 0)); // détection automatique octale printf("%ld\n", strtoimax("10", &endptr, 0)); // détection automatique décimale printf("%ld\n", strtoimax("0x10", &endptr, 0)); // détection automatique hexadécimale // erreur de plage : LONG_MAX+1 --> LONG_MAX errno = 0; printf("%ld\n", strtoimax("9223372036854775808", &endptr, 10)); printf("%s\n", strerror(errno)); }
Sortie :
-123 255 44027 8 10 16 9223372036854775807 Numerical result out of range
Références
- Norme C23 (ISO/IEC 9899:2024):
-
- 7.8.2.3 Les fonctions strtoimax et strtoumax (p: TBD)
- Norme C17 (ISO/CEI 9899:2018) :
-
- 7.8.2.3 Les fonctions strtoimax et strtoumax (p: TBD)
- Norme C11 (ISO/IEC 9899:2011):
-
- 7.8.2.3 Les fonctions strtoimax et strtoumax (p: 219)
- Norme C99 (ISO/CEI 9899:1999) :
-
- 7.8.2.3 Les fonctions strtoimax et strtoumax (p: 200)
Voir aussi
|
(C99)
(C99)
|
convertit une chaîne large en
intmax_t
ou
uintmax_t
(fonction) |
|
(C99)
|
convertit une chaîne d'octets en une valeur entière
(fonction) |
|
(C99)
|
convertit une chaîne d'octets en une valeur entière non signée
(fonction) |
|
Documentation C++
pour
strtoimax
,
strtoumax
|
|