C fread不读取结构
我有以下代码将结构写入这样的文件:C fread不读取结构,c,C,我有以下代码将结构写入这样的文件: void write_assignments_to_file(list* assignments, FILE* file) { while (assignments != NULL) { fwrite(assignments->a, sizeof(assignments->a), 1, file); assignments = assignments->next; } fclose(file
void write_assignments_to_file(list* assignments, FILE* file)
{
while (assignments != NULL) {
fwrite(assignments->a, sizeof(assignments->a), 1, file);
assignments = assignments->next;
}
fclose(file);
}
这是在写入文件,但当我再次尝试读取该文件时,它会挂起我的代码以便读取,如下所示:
list* read_assignments_from_file(FILE* file)
{
Assignment* assignment;
list* item;
item = NULL;
while ( fread(assignment, sizeof(assignment), 1, file) ) {
printf("Reading an assignment in");
insert(item, assignment);
}
fclose(file);
return item;
}
typedef struct Assignment {
char* moduleTitle;
char* moduleId;
char* title;
char* author;
time_t date_set;
time_t date_due;
int weighting;
} Assignment;
我的insert方法如下所示:
list* insert(list* assignment_pointer, Assignment* new_assignment)
{
list* ap = assignment_pointer;
if(assignment_pointer != NULL){
while (assignment_pointer->next != NULL) {
assignment_pointer = assignment_pointer -> next;
}
assignment_pointer -> next = (struct list*)malloc(sizeof(list));
assignment_pointer = assignment_pointer -> next;
assignment_pointer -> next = NULL;
assignment_pointer -> a = new_assignment;
return ap;
} else {
assignment_pointer = (list*) malloc (sizeof(list));
assignment_pointer -> next = NULL;
assignment_pointer -> a = new_assignment;
return assignment_pointer;
}
}
我的赋值结构定义如下所示:
list* read_assignments_from_file(FILE* file)
{
Assignment* assignment;
list* item;
item = NULL;
while ( fread(assignment, sizeof(assignment), 1, file) ) {
printf("Reading an assignment in");
insert(item, assignment);
}
fclose(file);
return item;
}
typedef struct Assignment {
char* moduleTitle;
char* moduleId;
char* title;
char* author;
time_t date_set;
time_t date_due;
int weighting;
} Assignment;
那么是什么原因导致我的程序挂起了?您需要对结构和指针进行更新
Assignment *assignment;
fread(assignment /*which is not set*/, sizeof(assignment) /*probably 4*/, 1, file);
/* Should look more like */
Assignment ass;
fread(&ass, sizeof(ass), 1, file);
可能还有其他问题,但这应该让你开始
您可能应该包括赋值的stuct定义,但我认为您在write()中也有同样的问题
我猜问题是读入未初始化的指针。您没有为
分配分配的内存。你可能想要更像这样的东西:
list* read_assignments_from_file(FILE* file)
{
Assignment assignment;
list* item;
item = NULL;
while ( fread(&assignment, sizeof(assignment), 1, file) ) {
printf("Reading an assignment in");
insert(item, &assignment);
}
还请注意,您的原始代码采用sizeof(assignment)
,当它声明为assignment*assignment时,它不会达到您所期望的效果代码>。它将为您提供赋值*
的大小,这是任何其他指针的大小-32位系统上为4字节,64位系统上为8字节