我下面的代码有seg错误。我是新来的C,一直有一些麻烦。基本上,在我的main中,我创建了一个struct node*head(指向struct节点的指针),并将其赋值为NULL。然后,我将struct node*head发送到push函数,该函数应将用户定义的整数插入列表的前面。我相信我在push函数中有问题,任何帮助都是非常恰当的。
~谢谢
//node.h
struct node{
int val;
struct node* next;
};
int length(struct node *);
struct node* push(struct node *, int);
void print(struct node *, int);
//node.c
#include "./node.h"
#include<stdlib.h>
#include<stdio.h>
int length(struct node *current){
if(current->next != NULL)
return 1 + length(current->next);
else
return 1;
}
struct node* push(struct node *head, int num){
struct node *temp = malloc(sizeof(struct node));
temp->val = num;
temp->next = head;
head = temp;
return head;
}
void print(struct node* head, int size){
printf("The list is %i", size);
printf(" long \n");
struct node* temp;
temp = head;
while(temp != NULL){
printf("%d", temp->val);
printf(" ");
temp = temp->next;
}
printf(" \n");
}
//main program
#include "./node.h"
#include<stdlib.h>
#include<stdio.h>
int main(){
char ans;
int num;
struct node* head = NULL;
do{
printf("Enter a integer for linked list: ");
scanf("%d", &num);
head = push(head, num);
printf("Add another integer to linked list? (y or n) ");
scanf("%1s", &ans);
}while(ans == 'y');
print(head, length(head));
return 0;
}
最佳答案
scanf
将在使用n+1
时将%ns
字符读入提供的缓冲区,因为终止符为空。
使用大小为2的缓冲区(char ans[2];
)并检查第一个字符(ans[0] == 'y'
)。您也不再需要在调用ans
时使用scanf
的地址。
关于c - C段故障中的链表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30563972/