我正在尝试从文本文件读取到 C 中的结构链接列表。
在程序中,我在文件中有一个结构定义,.h
如下所示:
typedef struct SystemDetails *SyDetails;
结构本身在 .cpp 文件中定义如下:
struct SystemDetails //stores system users data from the list
{
char fname[20],lname[20],password[7],email[30],SQuestion[10],SAnswer[10];
long unsigned int id;
int memory_alloc, request_ind,delete_ind;
SystemDetails *next;
};
处理文件和数据传输的函数是:
SyDetails System_Data()
{
FILE *fp=NULL;
SyDetails head=NULL,curr=NULL;
char fname[20],lname[20],password[7],email[30],SQuestion[10],SAnswer[10];
long unsigned int id=0;
int memory_alloc=0,request_ind=0,delete_ind=0;
fp=fopen("SystemList.txt","r+");
if(fp==NULL)//if file doesn't exist on the pc open a new file
{
printf("error,file cant open\n");
exit(-1);
}
else
{
while(fscanf(fp, "%s %s %d %s %s %s %s %d %d %d", &fname,&lname,&id,&email,&password,&SQuestion,&SAnswer,&memory_alloc,&request_ind,&delete_ind)!=EOF)
{
if(head==NULL)
{
head=(SyDetails) malloc(sizeof (SyDetails));
curr=head;
}
else
{
curr->next=(SyDetails) malloc(sizeof (SyDetails));
curr=curr->next;
}
strncpy(curr->fname, fname, 20);
strncpy(curr->lname, lname, 20);
curr->id=id;
strncpy(curr->email, email, 30);
strncpy(curr->password, password, 10);
strncpy(curr->SQuestion, SQuestion, 10);
strncpy(curr->SAnswer, SAnswer, 10);
curr->memory_alloc=memory_alloc;
curr->request_ind=request_ind;
curr->delete_ind=delete_ind;
curr->next=NULL;
}
}
return head;
}
无论如何,文本文件有 3 条记录,第一行有效,head==NULL
但第二次当函数到达链表的下一个节点时,它在该行崩溃,else
我收到一条错误消息:malloc
malloc
"Windows has triggered a breakpoint in final-project.exe.
这可能是由于堆损坏,这表明final-project.exe
它已加载或其加载的任何 DLL 中存在错误。
这也可能是由于用户F12
在final-project.exe
获得焦点时按下。
输出窗口可能有更多诊断信息。”
我的猜测是我在函数中定义指针的方式有些问题。
我会给予任何帮助,谢谢!