2011-01-30 4 views
-2
#include<stdio.h> 
#include<conio.h> 
#include <stdlib.h> 
#include<string> 

struct link_list { 
    char mail[50]; 
    int counter; 
    struct link_list *next; 
       }; 

    typedef struct link_list node; 

    void main() 
    { 
     FILE *fp ; 
     char string1[80]; 
     node *head=NULL; 
     int count_length=0; 
     char *fname = "email.txt"; 
     fp = fopen (fname, "r") ; 
     char line [ 128 ]; /* or other suitable maximum line size */ 
      int count=0; 

     while (fgets (line, sizeof line, fp) != NULL) /* read a line */ 
     { 
      count++; 
      if(head==NULL) 
      { 
       head=(node *)malloc(sizeof(node)); 
       fscanf(fp,"%s",string1); 
       strcpy(head->mail,string1); 
       head->counter=count; 
       head->next=NULL; 
      } 
      else 
      { 
       node *tmp = (node *)malloc(sizeof (node)); 
       fscanf(fp,"%s",string1); 
       strcpy(tmp->mail,string1); 
       tmp->next = head; 
       tmp->counter=count; 
       head = tmp; 
      } 
     } 

     fclose(fp); fp = fopen (fname, "r") ; 
     fclose(fp); 
     //printf("%d",count_length); 
     getch(); 
    } 

프로그램이 실행될 때 프로그램에 어설 션 오류가 발생합니다. 아무도 날 디버깅 도와 드릴까요?파일과 연결된 목록

+3

[파일에서 데이터를 가져 오기 위해 링크드리스트 사용] 가능한 중복 (http://stackoverflow.com/questions/4842166/linked-list-usage-to-obtain-data-from-file) – sarnold

+2

어떻게 다른가? 마지막 질문부터? –

+0

그것은 .. 이전 질문 문맥이 다르기 때문에 새로운 질문을 만들었습니다. –

답변

0

이 라인은 루프의 내부 비트는 아마도이 줄 뭔가를해야

gets (line, sizeof line, fp) != NULL 

라인이라는 버퍼에 파일에서 읽고? fscanf를 사용하여 파일 포인터를 읽는 대신 "sscanf"를 사용하여 방금 읽은 문자열을 읽는 방법은 무엇입니까?

더 이상 컨텍스트가 없으면 사용자가하려는 것을 알기가 어렵습니다. 빈 줄을 건너 뛰는 경우 코드가 의미가 있다고 생각합니다.

+0

나는 feof (fp! = 0)를 사용할 수있다 ????? –

+0

그것은 오류를 제공합니다. –

+0

어설 션 오류는 텍스트 파일 ........ 미안 얘들 아 ... –

0

node* head은 초기화되지 않습니다. 따라서 if (head==NULL)는 항상 false로 평가됩니다

제프 포스터가 한 말의 상단에

,이 파일의 라인을 읽고 fscanf과 함께 fgets를 호출 한 다음 다른 문자열 값을 읽고있다 (이것은 초기화되지 이후 정의되지 않은 동작입니다) . 따라서 fgets이 파일의 마지막 줄을 읽으면 fscanf에 대한 호출이 실패합니다. 이것은 귀하의 단언 실패와 관련이있을 수 있습니다.