#include <inttypes.h> // <cinttypes> en C++
intmax_t strtoimax( const char * restrict nptr, char ** restrict endptr, int base );
uintmax_t strtoumax( const char * restrict nptr, char ** restrict endptr, int base );
Ces deux fonctions convertissent le début d'une chaîne de caractères vers intmax_t ou uintmax_t.
Elles suivent la même logique que strtol, strtoll, strtoul et strtoull,
mais ciblent les types entiers les plus larges.
En cas de dépassement, elles renvoient une valeur limite et positionnent errno à ERANGE.
Comme toujours avec cette famille de fonctions, le paramètre endptr permet de savoir où la conversion s'est arrêtée.
L'exemple suivant convertit une valeur décimale et vérifie explicitement les erreurs de conversion.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#include <errno.h> #include <inttypes.h> #include <stdio.h> int main() { const char * text = "-1234567890123"; char * end; errno = 0; intmax_t value = strtoimax( text, &end, 10 ); if ( end == text ) { puts( "Aucune conversion." ); } else if ( errno == ERANGE ) { puts( "Valeur hors limites." ); } else { printf( "value == %" PRIdMAX "\n", value ); } return 0; } |
Améliorations / Corrections
Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.
Emplacement :
Description des améliorations :