【发布时间】:2015-01-20 22:49:33
【问题描述】:
我的程序需要从二进制文件读取到链表,这个函数做得很好并为它分配了正确的内存,但由于某种原因,它在中断之前执行了另一个循环。尝试为它寻找一个好的解决方案但没有运气,并且链接列表中的最后一个结构变得垃圾。
结构:
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;
}
【问题讨论】:
-
也许您输入的文件包含一些您不期望的额外数据?一个额外的字节就足以打破逻辑。
-
fread有一个返回值是有原因的。 -
也许文件最后包含一个 NULL 字符?你怎么把字符串写到文件中?
标签: c linked-list binaryfiles