因此,我尝试使用数组从用户获取输入并将其存储在链接列表中(每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/

10-13 01:09