Provided by: manpages-fr-dev_3.27fr1.4-1_all bug

NOM

       strtol, strtoll, strtoq - Convertir une chaine en un entier long

SYNOPSIS

       #include <stdlib.h>

       long int strtol(const char *nptr, char **endptr, int base);

       long long int strtoll(const char *nptr, char **endptr, int base);

   Exigences  de  macros  de  test de fonctionnalites pour la glibc (consultez
   feature_test_macros(7)) :

       strtoll() :
           XOPEN_SOURCE >= 600 || _BSD_SOURCE || _SVID_SOURCE ||
           _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
           ou cc -std=c99

DESCRIPTION

       La  fonction  strtol()  convertit  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 ou de
       caracteres interpretes comme tels par  isspace(3).  Un  signe  eventuel
       << + >>  ou  << - >>  peut suivre. Si base vaut 0 ou 16, la chaine peut
       inclure un prefixe << 0x >> et le nombre sera interprete  en  base  16.
       Sinon, une base valant zero est interpretee comme 10 (decimale) sauf si
       le caractere suivant est << 0 >>, auquel cas la base est 8 (octale).

       Le reste de  la  chaine  est  converti  en  une  valeur  long  int,  en
       s'arretant  au premier caractere qui ne soit pas un chiffre valide 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.

       Si  endptr  n'est  pas  NULL,  strtol()  stocke  l'adresse  du  premier
       caractere  invalide  dans *endptr. S'il n'y avait aucun chiffre valide,
       strtol() stocke la valeur originale de nptr dans  *endptr  (et  renvoie
       0).  En  particulier,  si  *nptr n'est pas << \0 >> et si **endptr vaut
       << \0 >> en retour, la chaine entiere est valide.

       La fonction strtoll() travaille comme strtol() mais renvoie une  valeur
       entiere de type "long long".

VALEUR RENVOY'EE

       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

       EINVAL (pas dans C99) La base indiquee n'est pas supportee.

       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 renvoye zero).

CONFORMIT'E

       strtol() est conforme a SVr4, BSD 4.3, C89,  C99  et  POSIX.1-2001,  et
       strtoll() a C99 et POSIX.1-2001.

NOTES

       Comme  strtol()  peut  legitimement  renvoyer  0,  LONG_MAX ou LONG_MIN
       (LLONG_MAX ou LLONG_MIN pour strtoll()) a la fois en cas de  succes  et
       d'echec,  le  programme  appelant  doit  positionner  errno  a  0 avant
       l'appel, et determiner si une erreur s'est  produite  en  verifiant  si
       errno a une valeur non nulle apres l'appel.

       Dans des localisations autre que << C >>, d'autres chaines peuvent etre
       acceptees (par exemple, un  signe  separateur  de  milliers  peut  etre
       accepte).

       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().

EXEMPLE

       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: Invalid argument
           $ ./a.out ''
           Pas de chiffre trouve
           $ ./a.out 4000000000
           strtol: Numerical result out of range

   Source du programme

       #include <stdlib.h>
       #include <limits.h>
       #include <stdio.h>
       #include <errno.h>

       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]) : 10;

           errno = 0;    /* Pour distinguer la reussite/echec apres l'appel */
           val = strtol(str, &endptr, base);

           /* Verification de certaines erreurs possibles */

           if ((errno == ERANGE && (val == LONG_MAX || val == LONG_MIN))
                   || (errno != 0 && val == 0)) {
               perror("strtol");
               exit(EXIT_FAILURE);
           }

           if (endptr == str) {
               fprintf(stderr, "Pas de chiffre trouve\n");
               exit(EXIT_FAILURE);
           }

           /* Si nous sommes ici, strtol() a analyse un nombre avec succes */

           printf("strtol() a renvoye %ld\n", val);

           if (*endptr != '\0')        /* Pas necessairement une erreur... */
               printf("Caracteres trouves apres le nombre : %s\n", endptr);

           exit(EXIT_SUCCESS);
       }

VOIR AUSSI

       atof(3), atoi(3), atol(3), strtod(3), strtoul(3)

COLOPHON

       Cette page fait partie de  la  publication  3.27  du  projet  man-pages
       Linux.  Une description du projet et des instructions pour signaler des
       anomalies      peuvent      etre       trouvees       a       l'adresse
       <URL:http://www.kernel.org/doc/man-pages/>.

TRADUCTION

       Depuis  2010,  cette  traduction est maintenue a l'aide de l'outil po4a
       <URL:http://po4a.alioth.debian.org/>   par   l'equipe   de   traduction
       francophone        au        sein        du       projet       perkamon
       <URL:http://perkamon.alioth.debian.org/>.

       Christophe Blaess  <URL:http://www.blaess.fr/christophe/>  (1996-2003),
       Alain  Portal  <URL:http://manpagesfr.free.fr/>  (2003-2006).   Nicolas
       Francois et l'equipe francophone de traduction de Debian (2006-2009).

       Veuillez  signaler  toute  erreur   de   traduction   en   ecrivant   a
       <debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
       paquet manpages-fr.

       Vous pouvez toujours avoir acces a la version anglaise de  ce  document
       en utilisant la commande << man -L C <section> <page_de_man> >>.