arrays - 无法将数据从文件复制到结构数组 (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;
}
解决方案
推荐阅读
- python - 使用 chess.uci 更改鳕鱼技能等级
- azure - 将错误从 Azure 数据工厂记录到 Application Insights(ADF 到 ApplicationInsights)
- mongodb - Elasticsearch 7.1:将 mongodb 聚合管道转换为弹性搜索查询
- delphi - 如何在 Delphi 中将“字符集”转换为“字节集”
- scheme - 作为标准,Scheme 是否有任何用于调用 let 的语法糖?
- python - 使用 Multiprocessing Poolmap 执行进程时,该进程未完成
- python - 在python中为极坐标图添加标签
- android - CameraX 多个后置摄像头
- c++ - OpenMP 返回错误结果
- go - 安装链码后尝试查询状态数据库时出现 Hyperledger 错误