Probleme en structure

Résolu
slt tt le monde
je veux faire un tableau de tructure qui contient par exemple 5 case,dans ces structures ya 3 champ
struct date
{
int jour;
char *moi; ---->pour stocker la chaine de caractere(decembre par exemple
int annee;
}
je veux que la date sra par exemple: 12 avril 2008
je sais pas cest ou lerreur si vous pouvez maider svp
__________________________________________________________________________
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct date {
int jour;
char *mois ;
int anne;
};typedef struct date tdate;
main()
{
tdate *toto;
int i;
toto=malloc(5*sizeof(tdate));
toto->mois=malloc(sizeof(char));
for(i=0;i<5;i++)
{
printf("le jour:\t");
scanf("%d",&(toto+i)->jour);
printf("le mois:\t");
gets((toto+i)->mois);
printf("l'annee:\t");
scanf("%d",&(toto+i)->anne);
}
for(i=0;i<5;i++)
printf("%d %s %d\n",(toto+i)->jour,(toto+i)->mois,(toto+i)->anne);
}
___________________________________________________________________________
avec ce code ca marche mais le mois est traité comme un int pas comme chaine

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct date {
int jour;
int moi;
int anne;
};typedef struct date tdate;
main()
{
tdate *toto;
int i;
toto=malloc(5*sizeof(tdate));
for(i=0;i<5;i++)
{
printf("le jour:\t");
scanf("%d",&(toto+i)->jour);
printf("le mois:\t");
scanf("%d",&(toto+i)->moi);
printf("l'annee:\t");
scanf("%d",&(toto+i)->anne);
}
for(i=0;i<5;i++)
printf("%d / %d / %d\n",(toto+i)->jour,(toto+i)->moi,(toto+i)->anne);
}
________________________________________________________________________________
merci d'avance
Configuration: Windows XP
Firefox 2.0.0.11

4 réponses

  1. Bonsoir,

    Le champ mois n'est pas initialisé correctement. Tu alloue seulement la taille d'un caractère, cad. 1 octet !
    toto->mois=malloc(sizeof(char));
    Il faudrait par exemple définir une constante pour allouer un nombre de caractères suffisant pour tout mois :
    #define LENGTH_MAX_OF_MONTH 10
    toto->mois=malloc(LENGTH_MAX_OF_MONTH);

    Sam.
    0
    1. merci de mavoir repondre
      jai essayer avec celui la
      ____________________________mais tjr ca marche pas
      #include<stdio.h>
      #include<stdlib.h>
      #include<string.h>
      struct date {
      int jour;
      char *mois ;
      int anne;
      };typedef struct date tdate;
      main()
      {
      tdate *toto;
      int i;
      toto=malloc(5*sizeof(tdate));
      toto->mois=malloc(9*sizeof(char));
      for(i=0;i<5;i++)
      {
      printf("le jour:\t");
      scanf("%d",&(toto+i)->jour);
      printf("le mois:\t");
      gets((toto+i)->mois);
      printf("l'annee:\t");
      scanf("%d",&(toto+i)->anne);
      }
      for(i=0;i<5;i++)
      printf("%d %s %d\n",(toto+i)->jour,(toto+i)->mois,(toto+i)->anne);
      }
      _________________________________________________________________________
      et je crois pas que cest le probleme,jai reserver un tabeau infini pr la chaine mois
      et voila jai fais un pti teste avec ce code
      _________________________________________
      #include<stdio.h>
      #include<stdlib.h>
      #include<string.h>
      struct date{
      char *moi;
      };typedef struct date tdate;
      main()
      {
      tdate *toto;
      toto=malloc(3*sizeof(tdate));
      toto->moi=malloc(sizeof(char));

      printf("saisi\t");
      gets(toto->moi);

      printf("%s\n",toto->moi);
      }
      ___________________________________________
      et ca marche!!!!!!!!!!!!!!!!!!!!!
      0
      1. euh jai trouver la 1er erreur cest ke
        pour linsstruction toto->mois=malloc(9*sizeof(char)); je reserve la memoire juste pour le pointeur moi qui se trouve dans la premier case
        il faus ke a chaque fois le i sincumente(passe a la next case je dois reserver la memoire)
        mais bon jai utiliser les tableaux statique cest mieux(rapidite + reserve pas tt la memoire disponible)
        voila le code pour les gens qui sinteraissent
        _____________________________________________
        #include<stdio.h>
        #include<stdlib.h>
        #include<string.h>
        struct date {
        int jour;
        char tab[50];
        int anne;
        };typedef struct date tdate;
        int test()
        {
        int v;
        char c;
        c=getchar();
        printf("voulez vous continuez?(o/n)\t");
        scanf("%c",&c);
        if(c=='o' || c=='O')
        v=1;
        else
        v=0;
        return v;
        }
        main()
        {

        tdate *toto;
        int i,j;
        i=0;
        toto=malloc(sizeof(tdate));
        do
        {
        printf("la date %d:\t",i+1);
        scanf("%d %s %d",&(toto+i)->jour,&(toto+i)->tab,&(toto+i)->anne);
        i++;
        }while(test());
        for(j=0;j<i;j++)
        printf("%d %s %d\n",(toto+j)->jour,(toto+j)->tab,(toto+j)->anne);
        }
        _________________________________
        allez a bientot
        0
        1. Par curiosité, tu utilises quel compilateur ? et comme environnement de développement ?
          Tu connais le C++ ?

          A bientôt !

          Sam.
          0
      2. moi je travaille avec visual basic studio parce que je travaille aussi le visual basic.le c++ cest pour lannée prochaine :-)
        aussi le java et le php cest un long programme qui mattend :-)
        allez a bientot
        0