probleme avec strtod en c

probleme avec strtod en c - C - Programmation

Marsh Posté le 10-06-2004 à 09:20:36    

salut à tous,
 
j'ai besoin de récoupérer des valeurs dans un fichier texte...
apres parsing du fichier j'obtient les valeurs sous forme de chaines de caractere (merci strtok...) ... et ca se complique :(
 
alors je suis fait une tite fonction test :
void convtest(){
  char test[] = "-120.02";
    char * err = NULL;
 
    int errno = 0;
 
    double result = strtod(test, &err);
    printf("%s %s\n","conversion de",test);
    if (err == test) {
        printf("Erreur de conversion :\n" );
    }  
    else {
      printf("Conversion reussie :%f\n", result);
        if(*err == '\0') {
            printf("Pour toute la chaine\n" );
        }
    }
}

 
et ca foire :(
elle me retourne c a:
conversion de -120.02
Conversion reussie :-1374389535.000000
Pour toute la chaine

 
c pas glop...
je précise que je suis sous fedora au cas ou ca aurait une importance (histoire de compilo ou librairie...)
 
merci pour vos indices  :bounce:  
paske la je seche  :cry:

Reply

Marsh Posté le 10-06-2004 à 09:20:36   

Reply

Marsh Posté le 10-06-2004 à 09:33:01    

j'ai rien dit ... :ange:


Message édité par cricri_ le 10-06-2004 à 09:33:40
Reply

Marsh Posté le 10-06-2004 à 09:35:01    

#include <stdlib.h> :o
 
rajoute des warnings :o
 
t'as été victime de la conversion vers int()(int) que le compilateur génère s'il ne trouve pas de déclaration de fonction

Reply

Marsh Posté le 10-06-2004 à 09:44:02    

mais sans stdlib ça ne compile pas chez-moi ...
sinon ça fonctionne correctement chez-moi.

Reply

Marsh Posté le 10-06-2004 à 10:02:45    

salut
 
moi sur linux quand j execute ton code tel quel jai ca
 
[palex@si01p139 exo]$ cc main.c
main.c: In function `main':
main.c:4: error: `NULL' undeclared (first use in this function)
main.c:4: error: (Each undeclared identifier is reported only once
main.c:4: error: for each function it appears in.)
 
maintenant si je rajoute le #include <stdlib.h>
 
[palex@si01p139 exo]$ cc main.c
[palex@si01p139 exo]$ ./a.out  
conversion de -120.02
Conversion reussie :-120.020000
Pour toute la chaine
 
donc un conseille toujours mettre les includes, apres de nombreux code realiser je me suis rendu compte que meme si ca compile et ke le programme s'execute le resultat n'es pas toujours le bon juste a cause de l'oubli d'un include ;) apres il es possible que certain compilateur les rajoute? mais bon si tu test ton code sur plusieurs archi comme moi sur linux bah ca marche plus :).
sinon comme tu pe le voir ton code marche tres bien...

Reply

Marsh Posté le 10-06-2004 à 15:29:42    

personne rajoute rien. en C il n'y a pas de surcharge de fonction, donc pour la liaison, seul son nom est nécessaire. ensuite, quand une fonction n'est pas déclarée, le compilateur synthétise un prototype int f(int) ... au final, l'association  int f(int) et double f(char, double, ...) est toujours valide. seulement à l'exécution, boom. donc oui, inclus toujours ce qu'il faut, dis à ton compilateur de gueuler un peu et ça passera.
 
le bug classique, c'est avec malloc, la converstion void* -> int fout en l'air ton pointeur comme double -> int à mité ton résultat

Reply

Marsh Posté le 13-06-2004 à 10:31:11    

ce qui est rigolo c'est que j'ai quand même compilé avec l'option -Wall...
et pourtant il n'a rien vu... :o\

Reply

Marsh Posté le 13-06-2004 à 10:35:24    

ça m'étonnerait
 

benoit@athlon >>> cat strtod.c
#include <stddef.h>
int main() { double d = strtod("3.14", NULL); return 0; }
 
[10:35:06][pts/100][/tmp][#10]
benoit@athlon >>> gcc strtod.c
 
[10:35:08][pts/100][/tmp][#11]
benoit@athlon >>> gcc -Wall strtod.c
strtod.c: Dans la fonction « main »:
strtod.c:2: attention : implicit declaration of function `strtod'
strtod.c:2: attention : unused variable `d'

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed