2016-10-20 16 views
-1

getline()を使って行全体を取得し、それをリンクリストに挿入する方法は? ここに私のコードです。私は文字列全体として行を見ることができるかどうかは確信しています。私は1行だけを試みたとき、プログラムは問題なく動作しています。私はそれが私が障害をセグメンテーション示して別の行を挿入しようとしたとき、しかし:11cでノードに行全体を挿入する方法は?

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; 

curがwhileループの後にNULLであるので、 、それは次を持っていません。

whileループでは、cur-> nextがnullでないことを確認します。つまり、newNodeをcur->次に割り当てると、curはNULLになりません。

これは、* head = newNodeを設定しただけなので、なぜ最初のものがうまくいったのかを説明しますが、次のものを追加するとsegフォルトが発生します。

関連する問題