我目前正在試圖寫入和讀取一個簡單的鏈接列表到一個文件中,但它似乎並沒有真正的工作,我不知道如果它甚至是可能的。C指針,結構和fwrite
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 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;
}
「fread(curr)'而不是'fread(&curr)'就足夠了。另外要注意指針,因爲'next'在寫入和讀回之後會受到影響。 – foxx1337
@ foxx1337:'curr'是一個野生指針,所以雖然你是正確的解除引用,但它仍然不起作用。 –