我的程序需要從二進制文件讀取鏈接列表,這個函數做得很好,併爲它分配正確的內存,但由於某種原因,它在斷開之前做了另一個循環。嘗試尋找一個好的解決方案,沒有運氣,鏈表中的最後一個結構變得垃圾。二進制文件的EOF是什麼?
的結構:
typedef struct
{
char id[10];
char * first_name;
char * last_name;
int age;
char gender;
char * username;
char * password;
char * description;
int hobbies[4];
struct Person * next_client;
}Person;
這裏是一些代碼:
Person * input_from_file(Person * member)
{
int str_size;
Person * clients_start = NULL;
FILE * filePointerRead;
filePointerRead = fopen("input.bin", "rb");
if (filePointerRead != NULL){
while (1){
member = NULL;
member = (Person*)malloc(sizeof(Person));
fread(&member->id, sizeof(char), ID_DIGITS + 1, filePointerRead);
fread(&str_size, sizeof(int), 1, filePointerRead);
member->first_name = (char*)malloc(str_size*sizeof(char));
fread(member->first_name, sizeof(char), str_size, filePointerRead);
//more reading from file
member->next_client = NULL;
clients_start = receive_clients_info(clients_start, member); //function to put the received struct from file to end of the linked list
if (feof(filePointerRead))
break;
}
fclose(filePointerRead);
}
return clients_start;
}
也許你輸入的文件包含一些額外的數據,你不期待?一個額外的字節足以打破邏輯。 – 2015-01-20 22:52:00
'fread'有一個返回值的原因。 – 2015-01-20 22:52:32
[如何使用EOF運行C中的文本文件?]的可能重複(http://stackoverflow.com/questions/1835986/how-to-use-eof-to-run-through-a-text- file-in-c) – gsamaras 2015-01-20 22:52:59