如何将整条线插入c中的节点



如何使用getline()获得整行并将其插入链表?这是我的代码。我很确定我是否可以把一条线看作一个完整的字符串。当我只尝试一行时,程序可以正常工作。但是当我试图插入另一行时,它显示我分割错误:11。

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("%sn", 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;
}

我认为segfault是当你这样做的时候:

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

由于while循环后cur为NULL,因此它没有next。

在while循环中,我会检查cur->next何时不为空,这样当您将newNode分配给cur->next时,cur将不会为null。

这就解释了为什么第一个可以工作,因为它只是设置*head = newNode,但是当您添加下一个时,会出现seg错误。

相关内容

  • 没有找到相关文章

最新更新