En C sprintf me donne que des zeros ??

Fermé
xfred - 18 sept. 2009 à 00:42
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 - 18 sept. 2009 à 05:44
Bonjour,

jai refait une partir de mon prog qui me renvoie qu'une escalade de zero jaimerais comprendre,

voici le code :
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]) //FONCTION MAIN
{
double formated[8] = {0};
char donee_formate1[] = {0};char donee_formate2[] = {0};
char donee_formate3[] = {0};char donee_formate4[] = {0};
char donee_formate5[] = {0};char donee_formate6[] = {0};
char donee_formate7[] = {0};char donee_formate8[] = {0};


formated[0] = 1234.5435;         formated[1] = 124434.5435;
formated[2] = 34.5435;             formated[3] = 143321.5435;
formated[4] = 1234.5434535;    formated[5] = 1234.55;
formated[6] = 0.0000;               formated[7] = 0.0000;

sprintf(donee_formate1,"%lf",formated[0]);
sprintf(donee_formate2,"%lf",formated[1]);
sprintf(donee_formate3,"%lf",formated[2]);
sprintf(donee_formate4,"%lf",formated[3]);
sprintf(donee_formate5,"%lf",formated[4]);
sprintf(donee_formate6,"%lf",formated[5]);
sprintf(donee_formate7,"%lf",formated[6]);
sprintf(donee_formate8,"%lf",formated[7]);


printf("----\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n ",donee_formate1,donee_formate2,
donee_formate3,donee_formate4,donee_formate5,donee_formate6,donee_formate7,donee_formate8 );

return EXIT_SUCCESS;

}

merci d'avance

1 réponse

kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
18 sept. 2009 à 05:44
Yo!

En faisant ça:

char donee_formate1[] = {0};char donee_formate2[] = {0};
char donee_formate3[] = {0};char donee_formate4[] = {0};
char donee_formate5[] = {0};char donee_formate6[] = {0};
char donee_formate7[] = {0};char donee_formate8[] = {0};


Tu crées 8 tableaux de caractères qui n'ont qu'une case.
Ce n'est pas assez pour stocker des caractères. Tu as besoin de nb caractères + le caractère de terminaison de chaine.

Tu peux leur donner 50 octets chacun, pas de soucis, et pas besoin de les initialiser à zero, sprintf insèrera le caractère de terminaison de chaine et printf n'ira pas lire plus loin.
Donc remplace par:

char donee_formate1[50];
char donee_formate2[50];
char donee_formate3[50];
char donee_formate4[50];
char donee_formate5[50];
char donee_formate6[50];
char donee_formate7[50];
char donee_formate8[50];


0