strtol(3) Library Functions Manual strtol(3) NOM strtol, strtoll, strtoq - Convertir une chaine en un entier long BIBLIOTHEQUE Bibliotheque C standard (libc, -lc) SYNOPSIS #include long strtol(const char *restrict nptr, char **restrict endptr, int base); long long strtoll(const char *restrict nptr, char **restrict endptr, int base); Exigences de macros de test de fonctionnalites pour la glibc (consulter feature_test_macros(7)) : strtoll() : _ISOC99_SOURCE || /* glibc <= 2.19: */ _SVID_SOURCE || _BSD_SOURCE DESCRIPTION La fonction strtol() convertit la partie initiale de la chaine nptr en un entier long en fonction de l'argument base, qui doit etre dans l'intervalle 2 a 36 (bornes comprises), ou avoir la valeur speciale 0. La chaine peut commencer par un nombre quelconque d'espaces (tels que definis par isspace(3)) suivi d'un eventuel signe << + >> ou << - >>. Si base vaut 0 ou 16, la chaine peut inclure un prefixe << 0x >> ou << 0X >> et le nombre sera interprete en base 16. Sinon, une base valant zero est interpretee comme 10 (base decimale) sauf si le caractere suivant est << 0 >>, auquel cas la base est 8 (base octale). Le reste de la chaine est converti en une valeur long, en s'arretant au premier caractere qui ne soit pas un chiffre autorise dans cette base. Dans les bases superieures a 10, la lettre << A >> (majuscule ou minuscule) represente 10, << B >> represente 11, et ainsi de suite jusqu'a << Z >> representant 35. If endptr is not NULL, and the base is supported, strtol() stores the address of the first invalid character in *endptr. If there were no digits at all, strtol() stores the original value of nptr in *endptr (and returns 0). In particular, if *nptr is not '\0' but **endptr is '\0' on return, the entire string is valid. La fonction strtoll() fonctionne comme strtol() mais renvoie une valeur entiere de type long long. VALEUR RENVOYEE La fonction strtol() renvoie le resultat de la conversion, a moins qu'un debordement superieur (overflow) ou inferieur (underflow) se produise. Si un depassement inferieur se produit, strtol() renvoie LONG_MIN. Si un depassement superieur se produit, strtol() renvoie LONG_MAX. Dans les deux cas, errno contient le code d'erreur ERANGE. La meme chose est vraie pour strtoll() avec LLONG_MIN et LLONG_MAX a la place de LONG_MIN et LONG_MAX. ERREURS This function does not modify errno on success. EINVAL (pas dans C99) La base indiquee n'est pas prise en charge. ERANGE La valeur retournee est hors limites. L'implementation peut aussi mettre errno a EINVAL si aucune conversion n'a ete realisee (pas de chiffres trouves, et 0 renvoye). ATTRIBUTS Pour une explication des termes utilises dans cette section, consulter attributes(7). +--------------------------+--------------------------+----------------+ |Interface | Attribut | Valeur | +--------------------------+--------------------------+----------------+ |strtol(), strtoll(), | Securite des threads | MT-Safe locale | |strtoq() | | | +--------------------------+--------------------------+----------------+ STANDARDS C11, POSIX.1-2008. HISTORIQUE strtol() POSIX.1-2001, C89, SVr4, 4.3BSD. strtoll() POSIX.1-2001, C99. NOTES Since strtol() can legitimately return 0, LONG_MAX, or LONG_MIN (LLONG_MAX or LLONG_MIN for strtoll()) on both success and failure, the calling program should set errno to 0 before the call, and then determine if an error occurred by checking whether errno == ERANGE after the call. POSIX.1 specifie que dans le cas de locales autres que << C >> et << POSIX >>, ces fonctions peuvent accepter des chaines numeriques propres a l'implementation. BSD a aussi quad_t strtoq(const char *nptr, char **endptr, int base); avec une definition exactement analogue. Suivant l'architecture, cela peut etre equivalent a strtoll() ou strtol(). CAVEATS If the base needs to be tested, it should be tested in a call where the string is known to succeed. Otherwise, it's impossible to portably differentiate the errors. errno = 0; strtol("0", NULL, base); if (errno == EINVAL) goto unsupported_base; EXEMPLES Le programme suivant montre l'utilisation de strtol(). Le premier argument de la ligne de commande specifie une chaine dans laquelle strtol() analysera un nombre. Le second argument, optionnel, specifie la base a utiliser pour la conversion. (Cet argument est converti sous forme numerique avec atoi(3), une fonction qui n'effectue aucune verification d'erreur et qui a une interface plus simple que strtol()). Voici plusieurs exemples de resultats produits par ce programme : $ ./a.out 123 strtol() a renvoye 123 $ ./a.out ' 123' strtol() a renvoye 123 $ ./a.out 123abc strtol() a renvoye 123 Caracteres trouves apres le nombre : abc $ ./a.out 123abc 55 strtol: Argument non valable $ ./a.out '' Pas de chiffre trouve $ ./a.out 4000000000 strtol: Resultat numerique hors intervalle Source du programme #include #include #include int main(int argc, char *argv[]) { int base; char *endptr, *str; long val; if (argc < 2) { fprintf(stderr, "Usage: %s str [base]\n", argv[0]); exit(EXIT_FAILURE); } str = argv[1]; base = (argc > 2) ? atoi(argv[2]) : 0; errno = 0; /* To distinguish success/failure after call */ strtol("0", NULL, base); if (errno == EINVAL) { perror("strtol"); exit(EXIT_FAILURE); } errno = 0; /* To distinguish success/failure after call */ val = strtol(str, &endptr, base); /* Check for various possible errors. */ if (errno == ERANGE) { perror("strtol"); exit(EXIT_FAILURE); } if (endptr == str) { fprintf(stderr, "No digits were found\n"); exit(EXIT_FAILURE); } /* If we got here, strtol() successfully parsed a number. */ printf("strtol() returned %ld\n", val); if (*endptr != '\0') /* Not necessarily an error... */ printf("Further characters after number: \"%s\"\n", endptr); exit(EXIT_SUCCESS); } VOIR AUSSI atof(3), atoi(3), atol(3), strtod(3), strtoimax(3), strtoul(3) TRADUCTION La traduction francaise de cette page de manuel a ete creee par Christophe Blaess , Stephan Rafin , Thierry Vignaud , Francois Micaux, Alain Portal , Jean-Philippe Guerard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas Francois , Florentin Duneau , Simon Paillard , Denis Barbier , David Prevot et Gregoire Scano Cette traduction est une documentation libre ; veuillez vous reporter a la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITE LEGALE. Si vous decouvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message a . Pages du manuel de Linux 6.06 19 decembre 2023 strtol(3)