Файловый ввод-вывод в языке Си

Вопрос:Выдаёт бесконечные нули при запуске программы, где и в чём может быть проблема, никак не могу понять где же я накосячил... ?

введите сюда описание изображения

Структура с именем TRAIN, с полями пункта назначения,номером поезда и врменем.

Код:

     #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
struct TRAIN
{
    char punkt[30];
    char time[30];
    int num;
};
    
typedef struct TRAIN TRAIN;
TRAIN* read(char *name, int *n)
{
    FILE *fp;
    if ((fp = fopen(name, "rb")) == NULL)
    {
        printf("%s", strerror(errno));
        exit(0);
    }
    fscanf(fp,"%d", n);
    TRAIN *way = (TRAIN *)malloc(sizeof(TRAIN) * *n);
    for (int i = 0; i < *n; i++)
    {
        fscanf(fp,"%s %s %d\n",way[i].punkt , way[i].time, &way[i].num);
    }
    fclose(fp);
    return way;
}
    
void print(TRAIN *way , int *n)
{
    for (int i = 0; i < *n; i++)
    {
        printf("%s %s %d\n", way[i].punkt, way[i].time, way[i].num);
    }
}
void write(char *name, int *n, TRAIN *way)
{
    FILE *fp;
    if ((fp = fopen(name, "wb")) == NULL)
    {
        printf("%s", strerror(errno));
        exit(0);
    }
    fprintf(fp, "%d\n", *n);
    for (int i = 0; i < *n; i++)
    {
        fprintf(fp, "%s %s %d\n", way[i].punkt, way[i].time, way[i].num);
    }
    fclose(fp);
}
    
TRAIN* read_p(char *name, int *n, int *e)
{
    FILE *fp;
    if ((fp=fopen(name, "rb")) == NULL)
    {
        printf("%s", strerror(errno));
        exit(0);
    }
    fscanf(fp, "%d", n);
    TRAIN *way = (TRAIN *)malloc(sizeof(TRAIN) * *n);
    char p[30];
    printf("punkt, time, num\n");
    printf("Введите данные: \n");
    scanf("%s", p);
    for (int i = 0; i < *n; i++)
    {
        char n1[30];
        char n2[30];
        int num;
        fscanf(fp, "%s %s %d", n1, n2, &num);
        if (strcmp(p, "punkt") == 0)
        {
            strcpy(way[i].punkt, n1);
            strcpy(way[i].time, "null");
            printf("%s\n", way[i].punkt);
        }
        else if (strcmp(p, "time") == 0)
        {
            strcpy(way[i].punkt, "null");
            strcpy(way[i].time, n2);
            printf("%s\n", way[i].time);
        }
        else if (strcmp(p, "num") == 0)
        {
            strcpy(way[i].punkt, "null");
            strcpy(way[i].time, "null");
            way[i].num=num;
            printf("%d\n", way[i].num);
        }
        else
        {
            strcpy(way[i].punkt, "null");
            strcpy(way[i].time, "null");
            *e=1;
        }
    }
    fclose(fp);
    return way;
}
char* read_number(char *name)
{
    FILE *fp;
    if ((fp = fopen(name, "rb")) == NULL)
    {
        printf("%s", strerror(errno));
        return "false";
    }
    int n;
    fscanf(fp, "%d", &n);
    TRAIN *way = (TRAIN *)malloc(sizeof(TRAIN) * n);
    int p;
    printf("Введите номер: \n");
    scanf("%d", &p);
    p=p-1;
    int e=1;
    for (int i = 0; i < n; i++)
    {
        char n1[30];
        char n2[30];
        int num;
        fscanf(fp, "%s %s %d", n1, n2, &num);
        if (i==p)
        {
            strcpy(way[i].punkt, n1);
            strcpy(way[i].time, n2);
            way[i].num=num;
            e=0;
            printf("%s %s %d\n", way[i].punkt, way[i].time, way[i].num);
        }
        else
        {
            strcpy(way[i].punkt, "null");
            strcpy(way[i].time, "null");
            way[i].num=0;
        }
    }
    fclose(fp);
    // print(way, &n);
    free(way);
    if (e == 0)
    {
        return "true";
    }
    else
    {
        return "false";
    }
    
}
    
int main ()
{
    int n, e;
    e=0;
    char *name_read = "structures.txt";
    char *name_write = "train.txt";
    TRAIN *way = read(name_read, &n);
    print(way, &n);
    write(name_write, &n, way);
    int n1;
    TRAIN *par = read_p(name_read, &n1, &e);
    if (e==1)
    {
        printf("Неверные данны\n");
    }
    printf("%s\n", read_number(name_read));
    free(way);
    free(par);
    return 0;
}

Ответы (0 шт):