2012-12-01 4 views
0

나는 연결된 목록에 대해 가르치고 있으며 해결해야 할 기본적인 문제를 제안했습니다. 나는 한 줄씩 한 줄씩 이름이있는 텍스트 파일을 읽고 각 이름을 내 연결된 목록에 추가하려고합니다.텍스트 파일에서 링크 된 목록 만들기

텍스트 파일의 예는 다음과 같습니다

John 
Jacob 
Jingleheimer 
Smith 

나는 문제가 동적으로 내 제안 된 연결 목록에 추가하는 방법을 알아내는 데입니다. 여기까지 내가 지금까지 가지고있는 것이있다.

#include <stdio.h> 
#include <stdlib.h> 



int main(void) 
{ 
    struct node { 
     char *name; 
     struct node* next; 
    }; 


    static const char* fileName = "test.txt"; 
    FILE *fp = fopen(fileName,"r"); 
    char *line = NULL; 
    size_t len = 0; 
    ssize_t read; 

    struct node* head = NULL; // first node 

    if (fp == NULL) 
     exit(EXIT_FAILURE); 

    while ((read = getline(&line, &len, fp)) != -1) 
    { 
     //add line of text to linked list 
    } 
    if (line) 
     free(line); 

     exit(EXIT_SUCCESS); 

} 

올바른 방향으로 어떤 포인터가 도움이 될 것입니다.

답변

3

좋아, 당신은 먼저 당신이 단지로 읽어 줄을 복사, 노드 항목을 할당해야이 작업을 수행합니다. 그런 다음 목록에 추가하십시오. (NULL을 반환하는 malloc과 같은 오류 처리를 생략했습니다.)

/* This will store the last read line first */ 
while ((read = getline(&line, &len, fp)) != -1) 
{ 
    struct node *n = malloc(sizeof(*n)); 
    n->name = strdup(line); /* copy the line since it can get reused by getline */ 
    n->next = head; 
    head = n; 
} 
+0

목록 삽입 부분에 대한 도움이 필요합니다. – sdsd

+0

n-> 다음 = head; 헤드 = n; – Gille

+0

기존 링크 된 목록 구조와 호환 가능합니까? 오류가 발생했습니다 – sdsd

0

문자열을 저장할 메모리를 할당하고 해당 메모리를 문자열로 설정하십시오. 그런 다음

node *next = malloc(sizeof(node)); 
next->name = name; 
next->next = NULL; 
head->next = next; 
head = next; 
+0

그래서 저는 이것을 루프에 넣었습니다. 그게 전부입니까? – sdsd

+0

@Gille 고맙습니다. 포인터를 놓친 것을 잊어 버렸습니다. 하하 – Avery3R

+0

문제는 없지만 코드도 segfault됩니다. head는 루프를 처음으로 NULL입니다. – Gille