因此,我尝试使用数组从用户获取输入并将其存储在链接列表中(每5个字符创建一个新的链接列表)。得到EOF之后,我要打印输入(实际上是在每个链接列表中打印数组)
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#define MAX 5
typedef struct charNode {
int arr[MAX];
struct charNode *next;
} charNode;
void addNode();
void printAll();
int main(){
int c,i;
charNode *head=malloc(sizeof(charNode));
charNode *current=head;
while((c=getchar())!=EOF){
while(i<MAX){
current->arr[i++]=c;
}
i=0;
addNode(current);
}
printAll(head);
return 0;
}
void addNode(charNode *current){
struct charNode *link = (struct charNode*) malloc(sizeof(struct charNode));
current->next =link;
link->next = NULL;
current=current->next;
}
void printAll(charNode *head){
int j=0;
while(head->next!=NULL){
while(j<MAX){
printf("\n %d \t",head->arr[j++]);
}
printAll(head->next);
}
return;
}
并且出现“分段错误(核心已转储)”错误。
最佳答案
这是未定义行为:
int c,i;
charNode *head=malloc(sizeof(charNode));
charNode *current=head;
while((c=getchar())!=EOF){
while(i<MAX){
current->arr[i++]=c;
}
由于您使用的是未经初始化的
i
来访问您的数组,因此可能会产生分段错误。更改此:
printf("\n %d \t",head->arr[j++]);
对此:
printf("\n %c \t",head->arr[j++]);
这样您就可以打印字符而不是数字。
只需将
i
初始化为0即可开始,调试愉快! =)关于c - 使用数组将用户的输入存储到链接列表中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43954639/