J'avais donné le code suivant à mes étudiants:
int i = atoi(argv[2]); printf("[2] = '%s'\n",argv[2]);
float f = atof(argv[4]); printf("[4] = '%s'\n",argv[4]);
char* s = argv[6];
printf("%i %s %f = %f\n",i,s,f,f+(float)i);
Et l'un d'entre eux vient me trouver en disant que, chez lui, le code affiche toujours "42 plus 0.00000 = 42.0000" quelque soit la valeur donnée à l'argument '-f'. Je récupère le fichier je compile ... ah flûte: pas de devkit SDL sur la machine qui sert à projeter les transparents pendant les répèts. Hop, je commente "#include output.h" je compile je teste ...
Et là, bardaf. pas moyen d'avoir une valeur correcte... Un p'tit coup de manpage
Warf. atof renvoie un double là où j'ai utilisé un float ... et printf("%f") suppose aussi la présence d'un double -- un nombre réel à haute précision, et prenant donc 2 fois plus de place ... vu que ça risque de poser des soucis (utilise une valeur tronquée, tout ça), je s/float/double/g tout ça je recompile et ... bin non. Toujours pas.Tout ça accroupis dans l'auditoire. Je ne me démonte pas, je démare ddd ... qui persiste et signe.
Il aura fallu que je sois de retour sur ma devstation dans mon bureau, à l'aise, pour mettre le doigt sur le bug ... grâce à gcc -Wall, soit-dit en passant. Je vous laisse cogiter, puis passez voir la réponse dans les commentaires: c'est bête comme chou.


Vote for your favourite post

