IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

strtol retourne 0


Sujet :

C

  1. #1
    Membre éclairé Avatar de Biosox
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 298
    Par défaut strtol retourne 0
    Hello,

    pour convertir du texte en entier, j'utilise strtol

    La fonction strtol retourne 0 si aucune conversion n'a été possible. Mais comment faire pour différencier le cas ou aucune conversion n'a été possible, et le cas ou le texte valait 0 ???

    merci

    P.S: par exemple, si il y a un dépassement de capacité, strtol retourne LONG_MAX ou LONG_MIN, mais dans ce cas indique par le biais de errno qu'il y a eu ce dépassement. mais pas si la conversion a été impossible

  2. #2
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    strtol() ne renvoie 0 que si aucun caractere n'a pu etre convertit. Le deuxieme argument de strtol() sert a la gestion d'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    long int strtol(const char *nptr, char **endptr, int base);
    Au retour de strtol(), endptr pointe vers le premier caractere qui n'a pu etre converti.
    Par exemple, si tu souhaites que l'ensemble d'une chaine soit converti, tu t'attends a ce que endptr pointe vers le caractere terminal ('\0') de la chaine:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    long value;
    char str[] = "1764";
    char *p;
     
    value = strtol(str, &p, 10);
    if (*p != '\0')
    {
        /* erreur -> la chaine n'a pas ete convertie en entier. */
    }
    Si tu remplaces "1764" par "1786a", par exemple, alors *p == 'a' mais value = 1764. A toi de considerer si c'est une erreur, ou s'il est possible de continuer avec les caracteres deja convertis.

  3. #3
    Membre éclairé Avatar de Biosox
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 298
    Par défaut
    Excellent!

    pour cette réponse précise et rapide! j'ai tellement l'habitude d'écrire strtol(buffer,NULL,10) que j'en ai oublié qu'il existait un deuxième paramètre entre le premier et le troisième

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MFC] Retourner une liste d'objets
    Par 1cado dans le forum MFC
    Réponses: 10
    Dernier message: 28/07/2003, 12h11
  2. sum(XPATH) retourne NaN
    Par TOM-Z dans le forum XMLRAD
    Réponses: 4
    Dernier message: 19/03/2003, 13h48
  3. Réponses: 2
    Dernier message: 06/03/2003, 16h37
  4. Retourner un talbeau
    Par taupin dans le forum C
    Réponses: 7
    Dernier message: 19/01/2003, 04h22
  5. [Manip de fichiers] Fonction retournant des infos
    Par sans_atouts dans le forum C
    Réponses: 3
    Dernier message: 24/07/2002, 14h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo