我的程序需要从二进制文件读取链接列表,这个函数做得很好,并为它分配正确的内存,但由于某种原因,它在断开之前做了另一个循环。尝试寻找一个好的解决方案,没有运气,链表中的最后一个结构变得垃圾。二进制文件的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