getc()中的分段错误

时间:2010-12-05 22:37:50

标签: c pointers

我正在用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

请指导我。 提前谢谢。


1 个答案:

答案 0 :(得分:6)

最可能的原因是它无法打开文件。

在致电ifp后立即检查fopen("tele.txt","r")是否为空。如果它为NULL,errno将为您提供更多错误的详细信息(很多可能的原因,其中一些是:文件不存在,您没有权限访问它,或者您'在错误的目录中。)

ch本身也存在一些问题,可能与崩溃无关:

  • ch未初始化,因此while (ch != EOF)可能输入也可能不输入[感谢@Dirk指出这一点];
  • while(ch !='\n')有点狡猾,如果你加密EOF,你最终会陷入无限循环。