我正在用C开发一个链表。我从txt文件中获取数据。但是当我尝试运行程序时,它给了我一个getc()的分段错误 这是代码,
#include<stdio.h>
#include<stdlib.h>
struct node{
char surname[100];
int number[1o0];
char name[100];
struct node *next;
};
typedef struct node Node;
int main()
{
FILE *ifp;
Node first ,*current;
//current =&first;
int i=0,j=0;
int ch;
char num[100],name[100];
ifp = fopen("tele.txt","r");
while (ch != EOF)
{
while(i<4)
{
ch = getc(ifp);
num[i++] = ch;
}
num[i] = '\0';
i=0;
while(ch !='\n')
{
ch = getc(ifp);
if(ch != '\t')
name[j++]=ch;
}
name[j] = '\0';
//ch = '\0';
printf("Number %s\nName %s\n ",num,name);
j=0;
}
fclose(ifp);
}
我尝试运行程序时遇到的错误是,
编程接收信号SIGSEGV,分段故障。 来自/lib64/libc.so.6的getc()中的0x0000003c0ee68dfa
请指导我。 提前谢谢。
答案 0 :(得分:6)
最可能的原因是它无法打开文件。
在致电ifp
后立即检查fopen("tele.txt","r")
是否为空。如果它为NULL,errno
将为您提供更多错误的详细信息(很多可能的原因,其中一些是:文件不存在,您没有权限访问它,或者您'在错误的目录中。)
ch
本身也存在一些问题,可能与崩溃无关:
ch
未初始化,因此while (ch != EOF)
可能输入也可能不输入[感谢@Dirk指出这一点]; while(ch !='\n')
有点狡猾,如果你加密EOF
,你最终会陷入无限循环。