[英]Malloc struct printing error in C
我正在嘗試編寫一個程序,該程序將.bin文件讀入動態分配的結構中。 直到我需要打印結果為止,它似乎一直在做我想要的事情。 我一次又一次遇到相同結構的無盡循環,而不是每個結構一次。 代碼如下:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
main(){
//File pointer
FILE *binFile = NULL;
//Struct declaration
typedef struct flightData_struct {
char flightNum[7];
char origCode[5];
char destCode[5];
int timeStamp;
struct flightData_struct* next;
} flightData;
flightData myFlightData;
struct flightData_struct *head;
struct flightData_struct *tail;
//Opening file
printf("Opening file...\n");
binFile = fopen("acars.bin", "rb");
if (binFile == NULL){
printf("ERROR: Could not open file. Please try again.");
return -1;
}
//Malloc'ing first struct
struct myflightData *point = (struct myFlightData*) malloc(sizeof(flightData));
fread(point, sizeof(flightData), 1, binFile);
head = point;
tail = point;
//Malloc'ing structs
while (!feof(binFile)){
flightData *temp = (struct flightData*) malloc(sizeof(flightData));
fread(temp, sizeof(flightData), 1, binFile);
temp->next = NULL;
tail->next = temp;
tail = tail->next;
}
tail = head;
while (tail != 0){
int t;
t = tail->timeStamp;
time_t time = t;
printf("%s| %s| %s| %s\n\n", tail->flightNum, tail->origCode, tail->destCode, asctime(gmtime(&time)));
}
//Closing file
printf("Closing file...");
fclose(binFile);
return 0;
}
這是我從中得到的輸出(它似乎無限循環)。
在while (tail != 0)
循環中,您永遠不會更新tail
,因此循環條件不會改變。 您需要將tail
移至列表下方。 將其添加到循環的末尾:
tail = tail->next;
這樣您就可以遍歷列表。
編輯:
在這種情況下,您會丟失對列表尾部的引用,這會使其他人混淆您的代碼。 相反,您應該定義一個單獨的變量,例如flightData temp
,將其初始化為head
,然后在循環中使用它而不是tail
。
其他一些問題:
切勿在C中malloc
的返回值,因為這樣做會掩蓋其他問題,例如不包括stdlib.h
。 由於malloc
返回void *
,因此可以將其分配給任何類型的指針,而無需強制轉換。 注意,這與C ++不同,后者需要這樣的轉換。
然后是這個:
struct myflightData *point = malloc(sizeof(flightData));
沒有定義struct myflightData
。 您可能要改用flightData
。
您也無法檢查fread
的返回值。 您應該這樣做:
len = fread(temp, sizeof(flightData), 1, binFile);
if (len == -1) {
perror("fread failed");
exit(1);
} else if (len != 1) {
fprintf(stderr,"read %d, expected %d\n", len, 1);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.