probleme avec strtod en c - C - Programmation
Marsh Posté le 10-06-2004 à 09:33:01
j'ai rien dit ...
Marsh Posté le 10-06-2004 à 09:35:01
#include <stdlib.h>
rajoute des warnings
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
Marsh Posté le 10-06-2004 à 09:44:02
mais sans stdlib ça ne compile pas chez-moi ...
sinon ça fonctionne correctement chez-moi.
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...
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
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... \
Marsh Posté le 13-06-2004 à 10:35:24
ça m'étonnerait
benoit@athlon >>> cat strtod.c |
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
paske la je seche