从文件读取数据到结构(分段错误)

时间:2015-12-25 16:30:34

标签: c file struct

我有一个电话簿的项目,我搜索了几个小时,以便从文件到结构读取数据的好方法,

经过大量试验,我在这种情况下出现了分段错误,我确信我对此部分存在误解:

        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 ;
}

1 个答案:

答案 0 :(得分:2)

main函数中,您有指针q,但实际上并不是指向任何位置。这意味着该变量未初始化且其值将为 indeterminate ,然后当您取消引用指针(在queue->head中)时,您将具有未定义的行为

简单的解决方案是将结构声明为指针而不是结构的实例,例如。

struct queue q;

但这还不够,因为q的内容将是未初始化的,例如。

struct queue q = { NULL, NULL, 0 };

然后获取指向此结构的指针,以便将其传递给函数,然后使用地址运算符&,如

read_str(&q);