填充结构数组时崩溃

时间:2017-12-05 11:03:30

标签: c

我正在尝试创建一个struct数组。

test.c的

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define TMAX 500

typedef struct InfosTrain InfosTrain;
struct InfosTrain {
    char * gareDepart;
    char * gareArrivee;
    char * heureDepart;
    char * heureArrivee;
    float Prix;
    char * reduction;
};

int main()
{
    char *train = NULL, *gDepart, *gArrivee;
    char *hDepart, *hArrivee;
    size_t bufsize = TMAX;
    char *prix, *reduc;
    int i=0;
    train = (char *)malloc(TMAX);
    InfosTrain tabTrains[21];
    FILE *f = NULL;
    f=fopen("Trains.txt", "r");
    if(f == NULL)
    {
        printf("Erreur ouverture fichier \n");
        exit(0);
    }
    else
    {
        while(getline(&train,&bufsize , f)!=-1)
        {
            getline(&train,&bufsize , f);
            gDepart = strtok(train, ";");
            tabTrains[i].gareDepart = gDepart;

            gArrivee= strtok(NULL, ";");
            tabTrains[i].gareArrivee = gArrivee;

            hDepart= strtok(NULL, ";");
            tabTrains[i].heureDepart = hDepart;

            hArrivee= strtok(NULL, ";");
            tabTrains[i].heureArrivee = hArrivee;

            prix= strtok(NULL, ";");
            tabTrains[i].Prix = atoi(prix);

            reduc= strtok(NULL, ";");
            tabTrains[i].reduction = reduc;
            i++;
        }
        for(i=0;i<21;i++)
        {
            printf("Gare de depart :%s\n",tabTrains[i].gareDepart);
            printf("Gare d'Arrivee :%s\n",tabTrains[i].gareArrivee);
            printf("Heure de depart :%s\n",tabTrains[i].heureDepart);
            printf("Heure d'arrivee :%s\n",tabTrains[i].heureArrivee);
            printf("Prix :%.2f\n",tabTrains[i].Prix);
            printf("Reduction : %s\n",tabTrains[i].reduction);
        }
    }

    fclose(f);
    return 0;
}

Trains.txt

Valence;Grenoble;6:15;7:31;17.60;REDUC
Valence;Grenoble;6:45;7:55;17.60;
Valence;Grenoble;7:15;8:32;17.60;
Grenoble;Valence;16:30;17:45;17.60;
Grenoble;Valence;16:55;17:55;17.60;SUPPL
Grenoble;Valence;17:30;18:46;17.60;
Grenoble;Valence;18:30;19:45;17.60;REDUC
Valence;Montelimar;12:30;12:56;9.80;REDUC
Valence;Montelimar;14:10;14:30;9.80;SUPPL
Valence;Montelimar;16:30;16:56;9.80;
Montelimar;Valence;6:30;6:55;9.80;
Montelimar;Valence;7:10;7:30;9.80;SUPPL
Montelimar;Valence;7:30;7:55;9.80;
Montelimar;Valence;8:00;8:25;9.80;
Montelimar;Valence;8:30;8:55;9.80;REDUC
Valence;Paris Gare de Lyon;15:15;17:49;109.50;REDUC
Valence;Paris Gare de Lyon;16:15;19:15;92.00;
Valence;Paris Gare de Lyon;17:15;19:53;92.80;
Paris;Gare de Lyon;7:41;10:11;113.00;REDUC
Paris;Gare de Lyon;10:07;12:19;90.00;
Paris;Gare de Lyon;10:07;13:15;92.20;

输出应为

Gare de depart :Valence
Gare d'arriveeGrenoble
Heure de depart :6:45
Heure d'arrivee :7:55
Prix :17.00
Reduction : 

Gare de depart :Grenoble
Gare d'arriveeValence
Heure de depart :16:30
Heure d'arrivee :17:45
Prix :17.00
Reduction : 

Gare de depart :Grenoble
Gare d'arriveeValence
Heure de depart :17:30
Heure d'arrivee :18:46
Prix :17.00
Reduction : 

Gare de depart :Valence
Gare d'arriveeMontelimar
Heure de depart :12:30
Heure d'arrivee :12:56
Prix :9.00
Reduction : REDUC

等...

但我明白了:

Gare de depart :Valence
Gare d'arriveeGrenoble
Heure de depart :6:45
Heure d'arrivee :7:55
Prix :17.00
Reduction : 

Gare de depart :Grenoble
Gare d'arriveeValence
Heure de depart :16:30
Heure d'arrivee :17:45
Prix :17.00
Reduction : 

Gare de depart :Grenoble
Gare d'arriveeValence
Heure de depart :17:30
Heure d'arrivee :18:46
Prix :17.00
Reduction : 

Gare de depart :Valence
Gare d'arriveeMontelimar
Heure de depart :12:30
Heure d'arrivee :12:56
Prix :9.00
Reduction : REDUC

Gare de depart :Valence
Gare d'arriveeMontelimar
Heure de depart :16:30
Heure d'arrivee :16:56
Prix :9.00
Reduction : 

Gare de depart :Montelimar
Gare d'arriveeValence
Heure de depart :7:10
Heure d'arrivee :7:30
Prix :9.00
Reduction : SUPPL

Gare de depart :Montelimar
Gare d'arriveeValence
Heure de depart :8:00
Heure d'arrivee :8:25
Prix :9.00
Reduction : 

Gare de depart :Valence
Gare d'arriveeParis Gare de Lyon
Heure de depart :15:15
Heure d'arrivee :17:49
Prix :109.00
Reduction : REDUC

Gare de depart :Valence
Gare d'arriveeParis Gare de Lyon
Heure de depart :17:15
Heure d'arrivee :19:53
Prix :92.00
Reduction : 

Gare de depart :Paris
Gare d'arriveeGare de Lyon
Heure de depart :10:07
Heure d'arrivee :12:19
Prix :90.00
Reduction : 

Gare de depart :Paris
Gare d'arriveeGare de Lyon
Heure de depart :10:07
Heure d'arrivee :13:15
Prix :92.00
Reduction : 

Gare de depart :Paris
Gare d'Arrivee :re de Lyon
Heure de depart :n
Heure d'arrivee :07
Prix :17.00
Reduction : .20
Gare de depart :Paris
Gare d'Arrivee :e de Lyon
Heure de depart :n
Heure d'arrivee :7
Prix :17.00
Reduction : 0
Gare de depart :Paris
Gare d'Arrivee :e de Lyon
Heure de depart :n
Heure d'arrivee :7
Prix :17.00
Reduction : 0
Gare de depart :Paris
Gare d'Arrivee :re de Lyon
Heure de depart :10:07
Heure d'arrivee :13:15
Prix :9.00
Reduction : 
Gare de depart :Paris
Gare d'Arrivee :re de Lyon
Heure de depart :10:07
Heure d'arrivee :13:15
Prix :9.00
Reduction : 
Gare de depart :Paris
Gare d'Arrivee :de Lyon
Heure de depart :10:07
Heure d'arrivee :
Prix :9.00
Reduction : 20
Gare de depart :Paris
Gare d'Arrivee :de Lyon
Heure de depart :10:07
Heure d'arrivee :
Prix :9.00
Reduction : 20
Gare de depart :Paris
Gare d'Arrivee :re de Lyon
Heure de depart ::15
Heure d'arrivee :.20
Prix :109.00
Reduction : 
Gare de depart :Paris
Gare d'Arrivee :re de Lyon
Heure de depart ::15
Heure d'arrivee :.20
Prix :92.00
Reduction : 

Gare de depart :Paris
Gare d'Arrivee :Gare de Lyon
Heure de depart :10:07
Heure d'arrivee :13:15
Prix :90.00
Reduction : 

Gare de depart :Paris
Gare d'Arrivee :Gare de Lyon
Heure de depart :10:07
Heure d'arrivee :13:15
Prix :92.00
Reduction : 

Gare de depart : �`�F
Gare d'Arrivee :��F
Erreur de segmentation (core dumped)

为什么程序会崩溃?

0 个答案:

没有答案