我目前正在尝试将一个简单的链表写入和读取到文件中,但它似乎并没有真正起作用,我不确定它是否可能。
typedef struct flug
{
int flugnummer;
char flugziel[50];
enum TAG flugtag;
int flugzeit_stunde;
int flugzeit_minute;
int gateway;
char status[10];
struct flug *next;
}FLUG;
typedef FLUG *ELEM_ZGR;
我担心问题可能是我不仅在写字符,而且在写 int .. 尤其是枚举。
int fluege_sichern() {
ELEM_ZGR curr;
FILE *fp;
char* tag;
curr = first;
if (fopen_s(&fp, datei,"a+b") != 0) {
printf("\nDatei %s nicht zum Anhaengen zu oeffnen",datei);
PAUSE;
exit(1);
}
for(curr = first; curr != NULL; curr = curr->next) {
fwrite(curr, sizeof(FLUG), 1, fp);
}
fclose(fp);
return 1;
}
这应该是将元素作为二进制文件写入文件的功能。我在这个函数中没有得到任何错误。
void fluege_laden() {
ELEM_ZGR curr;
FILE *fp;
int i = 0;
if (fopen_s(&fp, datei,"rb") != 0) {
printf("\nDatei %s nicht zum Lesen zu oeffnen",datei);
PAUSE;
exit(1);
}
while(1) {
fread(&curr, sizeof(FLUG), 1, fp);
printf("\n%d", curr->flugnummer);
//fluege_sortieren(curr);
}
}
当我尝试打印 curr->flugnummer 时出现错误。
好的,所以我稍微改变了这两个功能,但它似乎仍然不起作用。对不起,我好像没听懂……
[EDIT2] 另一个不起作用的版本:
void fluege_laden() {
ELEM_ZGR curr; // <<<- allocate an actual struct here rather than just a pointer
FILE *fp;
int i = 0;
curr = first;
if (fopen_s(&fp, datei,"rb") != 0) {
printf("\nDatei %s nicht zum Lesen zu oeffnen",datei);
PAUSE;
exit(1);
}
while(1) {
fread(curr, sizeof(FLUG), 1, fp);
printf("\n%d", curr->flugnummer); // <<<
printf("\n%s", curr->flugziel);
//fluege_sortieren(curr);
PAUSE;
}
}
int fluege_sichern() {
ELEM_ZGR curr;
FILE *fp;
curr = first;
if (fopen_s(&fp, datei,"a+b") != 0) {
printf("\nDatei %s nicht zum Anhaengen zu oeffnen",datei);
PAUSE;
exit(1);
}
for(curr = first; curr != NULL; curr = curr->next) {
fwrite(curr, sizeof(FLUG), 1, fp);
}
fclose(fp);
return 1;
}