Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Fscanf给出了一个分段错误_C_Segmentation Fault - Fatal编程技术网

Fscanf给出了一个分段错误

Fscanf给出了一个分段错误,c,segmentation-fault,C,Segmentation Fault,我花了几个小时试图找出这段代码的错误。我尝试过将代码放入feof while循环,以及将fscanf从循环中取出,这样它只运行一次。即使文件中的数据有效,这些更改仍然会引发分段错误 struct student *temp = (ident*) malloc (sizeof(ident)); while(fscanf(file1, "%s %s %d %f", temp->fname, temp->lname, temp->id, temp->gpa) != EOF) {

我花了几个小时试图找出这段代码的错误。我尝试过将代码放入feof while循环,以及将fscanf从循环中取出,这样它只运行一次。即使文件中的数据有效,这些更改仍然会引发分段错误

struct student *temp = (ident*) malloc (sizeof(ident));
while(fscanf(file1, "%s %s %d %f", temp->fname, temp->lname, temp->id, temp->gpa) != EOF) {
    if(head == NULL)
        head = temp;
    else {
        struct student *traverse = head;
        while(traverse->next != NULL)
            traverse = traverse->next;
        traverse->next = temp;
        printf("added");
    }
}
以下是结构:

struct student{
char fname[256];
char lname[256];
unsigned int id;
float gpa;
struct student *next;
};
文本文件上的一行示例:

无名氏13.6


john smith 3 2.4

您必须将指针传递给值,而不是值传递给
fscanf
(注意
&
-在
&temp->id
&temp->gpa中签名;
字符[]
-类型
lname
fname
自动衰减为指针):


有两个符号missing@wilfplasser谢谢大家!<代码>在feof while循环中的代码
不要这样做。看:@wildplasser谢谢你的提醒!威尔坚持fscanf,只是用feof来找出问题所在。真不敢相信我错过了。非常感谢。我习惯了java,总是忘记语法。如果允许,我将接受答案。为了澄清,字符数组的名称大致相当于保存字符数组第一个地址的变量;但整数或浮点的名称大致相当于整数或浮点的值。这意味着您必须明确指出整数或浮点的名称的地址,而您可以使用数组的简写名称,而不使用“address of”运算符。@EdwinBuck明白了!一直忘记做这件事,太习惯java了!
while(fscanf(file1, "%s %s %d %f", temp->fname, temp->lname, &temp->id, &temp->gpa) != EOF) {