strtol   Début   Suivant   Sommaire   Préc.page.lue   Accueil
Section: Manuel du programmeur Linux (3)
Updated: 26 juillet 2007
Sommaire  



NOM   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
strtol, strtoll, strtoq - Convertir une chaîne en un entier long  



SYNOPSIS   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
#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 fonctionalités pour la glibc (voir feature_test_macros(7)) :

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




DESCRIPTION   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
La fonction strtol() convertit la chaîne nptr en un long int en fonction de l'argument base, qui doit être dans l'intervalle 2 à 36 (bornes comprises), ou avoir la valeur spéciale 0.

La chaîne peut commencer par un nombre quelconque d'espaces ou de caractères interprétés comme tels par isspace(3). Un signe éventuel « + » ou « - » peut suivre. Si base vaut 0 ou 16, la chaîne peut inclure un préfixe « 0x » et le nombre sera interprété en base 16. Sinon, une base valant zéro est interprétée comme 10 (décimale) sauf si le caractère suivant est « 0 », auquel cas la base est 8 (octale).

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 les bases supérieures à 10, la lettre « A » (majuscule ou minuscule) représente 10, « B » represente 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   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
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   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
EINVAL
(pas dans C99) La base donnée n'est pas supportée.
ERANGE
La chaîne n'était pas dans l'intervalle acceptable, la valeur a été arrondie.

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




CONFORMITÉ   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
strtol() est conforme à SVr4, BSD 4.3, C89, C99 et POSIX.1-2001, et strtoll() à C99 et POSIX.1-2001.  



NOTES   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
Puisque strtol() peut légitimement renvoyer 0, LONG_MAX ou LONG_MIN (LLONG_MAX ou LLONG_MIN pour strtoll()) en cas d'échec ou de succès, le programme appelant devrait écrire 0 dans errno avant l'appel et déterminer si une erreur est survenue en vérifiant si errno à une valeur non nulle après l'appel.

Dans des localisations autre que « C », d'autres chaînes peuvent être acceptées. (Par exemple, un signe séparateur de milliers peut être accepté).

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



EXEMPLE   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
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 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
Plusieurs caractères après le nombre : abc
$ ./a.out 123abc 55
strtol: Argument invalide
$ ./a.out ''
Aucun chiffre trouvé
$ ./a.out 4000000000
strtol: Résultat numérique hors intervalle

Le code source du programme est le suivant :

#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;    /* To distinguish success/failure after call */
    val = strtol(str, &endptr, base);

    /* Check for various possible errors */

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

    if (endptr == str) {
        fprintf(stderr, "Aucun chiffre trouvé\n");
        exit(EXIT_FAILURE);
    }

    /* If we got here, strtol() successfully parsed a number */
    printf("strtol() a renvoyé %ld\n", val);

    if (*endptr != '\0')        /* Not necessarily an error... */
        printf("Plusieurs caractères après le nombre : %s\n", endptr);

    exit(EXIT_SUCCESS);
}
 



VOIR AUSSI   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
atof(3), atoi(3), atol(3), strtod(3), strtoul(3)  



TRADUCTION   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil

Ce document est une traduction réalisée par Christophe Blaess <http://www.blaess.fr/christophe/> le 10 novembre 1996 et révisée le 8 janvier 2008.

L'équipe de traduction a fait le maximum pour réaliser une adaptation française de qualité. La version anglaise la plus à jour de ce document est toujours consultable via la commande : « LANG=C man 3 strtol ». N'hésitez pas à signaler à l'auteur ou au traducteur, selon le cas, toute erreur dans cette page de manuel.


 



Sommaire   Début   Suivant   Sommaire   Préc.page.lue   Accueil
NOM
SYNOPSIS
DESCRIPTION
VALEUR RENVOYÉE
ERREURS
CONFORMITÉ
NOTES
EXEMPLE
VOIR AUSSI
TRADUCTION

Table des mots clés   Début   Suivant   Sommaire   Préc.page.lue   Accueil
EINVALERREURS
ERANGEERREURS



Ce document a été créé par man2html suivi de man2html.pl, le 17/10/2008 17:51:35, en utilisant les pages de 'man'.
 

Valid HTML 4.01 Transitional