使用数组将用户的输入存储到链接列表中

时间:2017-05-13 15:06:59

标签: c arrays linked-list segmentation-fault runtime-error

所以我试图从用户那里获得输入并使用数组将其存储在链表中(每5个字符创建一个新的链表)。获得EOF后我想打印输入(实际打印每个链表中的数组) 这是我的代码:

save: function (rows) {
  gridStorage.uid = rows.length
  localStorage.setItem(STORAGE_KEY, JSON.stringify(rows))
}

我收到“Segmentation fault(core dumped)”错误..

2 个答案:

答案 0 :(得分:2)

这是未定义的行为

int c,i;
charNode *head=malloc(sizeof(charNode));
charNode *current=head;

while((c=getchar())!=EOF){
  while(i<MAX){
    current->arr[i++]=c;
  }

因为您使用i未初始化来访问您的阵列,这可能会产生Segmentation错误。

改变这个:

printf("\n %d \t",head->arr[j++]);

到此:

printf("\n %c \t",head->arr[j++]);

这样您就可以打印字符而不是数字。

只需将i初始化为0即可开始,快乐调试! =)

答案 1 :(得分:0)

int main(){
    char c;
    charNode *head=malloc(sizeof(charNode));
    charNode *current=head;

    int i = 0;

    while((c=getchar())!=EOF){
        getchar();
        while(i<MAX){
            current->arr[i++]=c;
        }
        i=0;
        addNode(&current);
    }

    printAll(head);


    return 0;
}

void addNode(charNode **current){
    struct charNode *link = malloc(sizeof(struct charNode));
    link->next = NULL;
    (*current)->next =link;
    *current=(*current)->next;
} 

void printAll(charNode *head){
    int j=0;
    if(head!=NULL){
        while(j<MAX){
            printf("%c\n",head->arr[j++]);
        }
        if(head->next != NULL)
            printAll(head->next);
    }
}

我改变了你的代码。特别是看看addNode()。现在它可以正常工作