我有一个电话簿的项目,我搜索了几个小时,以便从文件到结构读取数据的好方法,
经过大量试验,我在这种情况下出现了分段错误,我确信我对此部分存在误解: if(queue->head == NULL )
整个代码 - 远远低于
struct pb
{
char Firstname[25];
char Lastname[25];
char Address[70];
char email[50];
char number[11];
struct pb *next;
};
struct queue
{
struct pb *head;
struct pb *tail;
int size;
};
void read_str(struct queue *queue){
{
FILE *read ;
char filename[40];
printf("Enter file name \n");
scanf("%s",&filename);
read=fopen(filename,"r");
if (read == NULL)
printf("Error");
else
while(!feof(read))
{
struct pb *n= malloc(sizeof(struct pb));
fscanf(read,"%s %s %s %s %s", &n->Firstname, &n->Lastname, &n->Address, &n->email, &n->number);
n->next=NULL;
if(queue->head == NULL )
{
queue->head=n;
}
else
{
queue->tail->next=n;
}
queue->tail=n;
queue->size++;
}
}
}
int main(){
struct queue *q;
read_str(q);
return 0 ;
}
答案 0 :(得分:2)
在main
函数中,您有指针q
,但实际上并不是指向任何位置。这意味着该变量未初始化且其值将为 indeterminate ,然后当您取消引用指针(在queue->head
中)时,您将具有未定义的行为。
简单的解决方案是将结构声明为指针而不是结构的实例,例如。
struct queue q;
但这还不够,因为q
的内容将是未初始化的,例如。
struct queue q = { NULL, NULL, 0 };
然后获取指向此结构的指针,以便将其传递给函数,然后使用地址运算符&
,如
read_str(&q);