首页 > 解决方案 > 无法将数据从文件复制到结构数组 (c)

问题描述

首先,对于我可能犯的任何错误,我深表歉意,但英语不是我的母语。我也睡眠不足,焦虑不安,因为我一直等到最后一刻才寻求帮助。我有一个问题,此时我什至不确定它是什么,但我认为它要么是我的 fscanf 要么是我的 malloc。我有一个结构数组,我需要将文件中的信息复制到这个数组的结构中。当我成功复制第一个结构的数据时,我将在文件中添加更多数据。我无法更改结构,因为它们是这样分配给我的。

我真的试着自己做这件事,但我已经两天没睡觉了,我一辈子都无法找出我做错了什么。在这一点上,我一直盯着代码看,错误可能就在我面前,我仍然无法看到它。欢迎任何建议!!!

这就是我的 catalog.txt 的样子

在此处输入图像描述

这就是我的 videoclub.h 的样子

#define SIZE 100
#include <stdio.h>

typedef struct date{
    int day, month, year;
}date;

typedef struct director_info{
    char *director_name, *director_surname;
}director_info;

typedef struct movie{
    int id;
    char *title;
    director_info *director;
    date *release_date;
}movie;
int loadArray( movie *array, FILE *fp);

这就是我的 main.c 的样子

#include <stdlib.h>
#include <stdio.h>
#include "videoclub.h"

int main()
{   

    movie *array;
    FILE* fp;
    int logs;
    

    fp = fopen("catalog.txt", "r");
    if( fp == NULL) printf("Could not open file catalog!\n");


    logs = loadArray(array, fp);
    fclose(fp);

    printf("%d\n", logs);
}

这是我在 videoclub.c 中的代码

int loadArray(movie *array, FILE *fp){

    char c;
    int counter, logs, i;

    counter = 0;
    i = 0;

    for (c = getc(fp); c!= EOF; c = getc(fp)){                           //counts how many lines our file has
        if (c == '\n')
            counter = counter + 1;
    }
    logs = counter/7;                                                    //how many logs of movies do we have?

    array = (movie*) malloc (logs * sizeof(movie));                     // allocating memory for array


        array[0].title = (char*) malloc (sizeof(char) * SIZE);
        array[0].director = (director_info*) malloc (sizeof(director_info));
        array[0].director->director_name = (char*) malloc (sizeof(char) * SIZE);
        array[0].director->director_surname = (char*) malloc (sizeof(char) * SIZE);
        array[0].release_date = (date*) malloc (sizeof(date));
        
        
        i = fscanf(fp, "%d\n%s\n%s\n%s\n%d\n%d\n%d\n ", &(array[0].id), array[0].title, array[0].director->director_name, array[0].director->director_surname, &array[0].release_date->day, &array[0].release_date->month, &array[0].release_date->year);
        printf("%d\n%s\n%s\n%s\n%d\n%d\n%d\n", array[0].id, array[0].title,  array[0].director->director_name, array[0].director->director_surname, array[0].release_date->day,array[0].release_date->month, array[0].release_date->year );
        printf("%d\n", i);
        printf("test\n");
        
        return logs;
    


}

这就是我得到的: 在此处输入图像描述

标签: arrayscfilestructscanf

解决方案


推荐阅读