table of contents
- buster-backports 4.9.3-4~bpo10+1
- testing 4.9.3-4
- unstable 4.9.3-4
STRTOL(3) | Manuel du programmeur Linux | STRTOL(3) |
NOM¶
strtol, strtoll, strtoq - Convertir une chaîne en un entier longSYNOPSIS¶
#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 fonctionnalités pour la glibc (consulter
feature_test_macros(7)) :
strtoll() :
DESCRIPTION¶
La fonction strtol() convertit la chaîne nptr en un entier long en fonction de l'argument base, qui doit être dans l'intervalle 2 à 36 (bornes comprises), ou avoir la valeur spéciale 0.The string may begin with an arbitrary amount of white space (as determined by isspace(3)) followed by a single optional '+' or '-' sign. If base is zero or 16, the string may then include a "0x" or "0X" prefix, and the number will be read in base 16; otherwise, a zero base is taken as 10 (decimal) unless the next character is '0', in which case it is taken as 8 (octal).
Le reste de la chaîne est converti en une valeur long int, en s'arrêtant au premier caractère qui ne soit pas un chiffre valide dans cette base. Dans les bases supérieures à 10, la lettre « A » (majuscule ou minuscule) représente 10, « B » représente 11, et ainsi de suite jusqu'à « Z » représentant 35.
Si endptr n'est pas NULL, strtol() stocke l'adresse du premier caractère 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 chaîne entière est valide.
La fonction strtoll() travaille comme strtol() mais renvoie une valeur entière de type "long long".
VALEUR RENVOYÉE¶
La fonction strtol() renvoie le résultat de la conversion, à moins qu'un débordement supérieur (overflow) ou inférieur (underflow) se produise. Si un dépassement inférieur se produit, strtol() renvoie LONG_MIN. Si un dépassement supérieur se produit, strtol() renvoie LONG_MAX. Dans les deux cas, errno contient le code d'erreur ERANGE. La même chose est vraie pour strtoll() avec LLONG_MIN et LLONG_MAX à la place de LONG_MIN et LONG_MAX.ERREURS¶
- EINVAL
- (pas dans C99) La base indiquée n'est pas supportée.
- ERANGE
- La valeur retournée est hors limites.
L'implémentation peut aussi mettre errno à EINVAL si aucune conversion n'a été réalisée (pas de chiffres trouvés, et renvoyé zéro).
ATTRIBUTS¶
Pour une explication des termes utilisés dans cette section, consulter attributes(7).Interface | Attribut | Valeur |
strtol(), strtoll(), strtoq() | Sécurité des threads | MT-Safe locale |
CONFORMITɶ
strtol(): POSIX.1-2001, POSIX.1-2008, C89, C99 SVr4, 4.3BSD.strtoll(): POSIX.1-2001, POSIX.1-2008, C99.
NOTES¶
Comme strtol() peut légitimement renvoyer 0, LONG_MAX ou LONG_MIN (LLONG_MAX ou LLONG_MIN pour strtoll()) à la fois en cas de succès et d'échec, le programme appelant doit positionner errno à 0 avant l'appel, et déterminer si une erreur s'est produite en vérifiant si errno a une valeur non nulle après l'appel.According to POSIX.1, in locales other than the "C" and "POSIX", these functions may accept other, implementation-defined numeric strings.
BSD a aussi
quad_t strtoq(const char *nptr, char **endptr, int base);
avec une définition exactement analogue. Suivant l'architecture, cela peut être équivalent à strtoll() ou strtol().
EXEMPLES¶
Le programme suivant montre l'utilisation de strtol(). Le premier argument de la ligne de commande spécifie une chaîne dans laquelle strtol() analysera un nombre. Le second argument, optionnel, spécifie la base à utiliser pour la conversion. (Cet argument est converti sous forme numérique avec atoi(3), une fonction qui n'effectue aucune vérification d'erreur et qui a une interface plus simple que strtol()). Voici plusieurs exemples de résultats produits par ce programme :
$ ./a.out 123 strtol() a renvoyé 123 $ ./a.out ' 123' strtol() a renvoyé 123 $ ./a.out 123abc strtol() a renvoyé 123 Caractères trouvés après le nombre : abc $ ./a.out 123abc 55 strtol: Invalid argument $ ./a.out '' Pas de chiffre trouvé $ ./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 réussite/échec après l'appel */ val = strtol(str, &endptr, base); /* Vérification 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 trouvé\n"); exit(EXIT_FAILURE); } /* Si nous sommes ici, strtol() a analysé un nombre avec succès */ printf("strtol() a renvoyé %ld\n", val); if (*endptr != '\0') /* Pas nécessairement une erreur... */ printf("Caractères trouvés après le nombre : %s\n", endptr); exit(EXIT_SUCCESS); }
VOIR AUSSI¶
atof(3), atoi(3), atol(3), strtod(3), strtoimax(3), strtoul(3),COLOPHON¶
Cette page fait partie de la publication 5.07 du projet man-pages Linux. Une description du projet et des instructions pour signaler des anomalies et la dernière version de cette page, peuvent être trouvées à l'adresse https://www.kernel.org/doc/man-pages/.TRADUCTION¶
La traduction française de cette page de manuel a été créée par Christophe Blaess <https://www.blaess.fr/christophe/>, Stéphan Rafin <stephan.rafin@laposte.net>, Thierry Vignaud <tvignaud@mandriva.com>, François Micaux, Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe Guérard <fevrier@tigreraye.org>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>, Julien Cristau <jcristau@debian.org>, Thomas Huriaux <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>, Denis Barbier <barbier@debian.org> et David Prévot <david@tilapin.org>Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.
Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à <debian-l10n-french@lists.debian.org>.
9 juin 2020 | GNU |