Provided by:
manpages-fr-dev_3.27fr1.4-1_all 
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> >>.