2016-10-20 4 views
-1

Как использовать getline(), чтобы получить целую строку и вставить ее в связанный список? Вот мой код. Я уверен, могу ли я посмотреть строку как целую строку. Когда я пробовал только одну строку, программа работает без проблем. Но когда я попытался вставить еще одну строку он показывает мне ошибку сегментации: 11.Как вставить целую строку в узел в c?

typedef struct Node{ 
    struct Node *next; 
    char *data; 
}Node; 

void insert(Node **head, char *input){ 
    Node *newNode = malloc(sizeof(Node)); 
    newNode->data = input; 
    newNode->next = NULL; 

    Node *cur = *head; 
    if(*head == NULL){ 
     *head = newNode; 
    } 
    else{ 
     while(cur!=NULL){ 
      cur = cur->next; 
     } 
     cur->next = newNode; 
    } 
} 

void Pint(Node *head){ 
    Node *cur = head; 
    while(cur!=NULL){ 
     printf("%s\n", cur->data); 
     cur = cur->next; 
    } 
    printf("\n"); 
} 


int main(){ 
    Node *head = NULL; 
    char *input = NULL; 
    size_t len = 0; 
    while(getline(&input, &len, stdin)!=EOF){ 
     insert(&head, input); 
     input = NULL; 
    } 
    Pint(head); 
    return 0; 
} 
+2

Попробуйте переместить cur = cur-> next; ниже cur-> next = newNode; – user2519193

+0

@ user2519193 Кажется, что он имеет бесконечный цикл ... – user1234567

+0

Изменить цикл while на if. – user2519193

ответ

0

Я считаю, что вина сегментный, когда вы делаете:

while(cur!=NULL){ 
     cur = cur->next; 
    } 
    cur->next = newNode; 

С дворняжка после цикла в то время как NULL , у него нет следующего.

В цикле while я проверил бы, когда cur-> next не является нулевым, таким образом, когда вы назначаете newNode cur-> next, cur не будет NULL.

Это объясняет, почему первый работал, так как он просто устанавливает * head = newNode, но затем возникает ошибка seg, когда вы добавляете следующую.