Ошибка сегментации в getc () - PullRequest
0 голосов
/ 06 декабря 2010

Я разрабатываю связанный список на C. И я получаю данные из текстового файла. Но когда я пытаюсь запустить программу, она вызывает ошибку сегментации 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, Ошибка сегментации. 0x0000003c0ee68dfa в getc () из /lib64/libc.so.6

Пожалуйста, ведите меня в этом. заранее спасибо.


1 Ответ

6 голосов
/ 06 декабря 2010

Наиболее вероятная причина в том, что он не может открыть файл.

Убедитесь, что ifp не равно NULL сразу после того, как вы позвонили fopen("tele.txt","r").Если он равен NULL, errno даст вам более подробную информацию о том, что пошло не так (множество возможных причин, некоторые из которых: файл не существует, у вас нет прав доступа к нему, или вы находитесь внеправильный каталог.)

Существует также несколько проблем вокруг самого ch, вероятно, не связанных с сбоем:

  • ch не инициализирован, поэтому while (ch != EOF) можетили не может быть введено [спасибо @Dirk за указание на это];
  • while(ch !='\n') немного хитроумно, потому что если вы наберете EOF, вы окажетесь в бесконечном цикле.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...