链表中的C段故障



有segfault错误与我的代码张贴如下。我是C的新手,一直遇到一些问题。基本上在我的主我做了一个结构节点*头(指针指向一个结构节点),并将其分配给NULL。然后,我将struct node * head发送给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;
       }

当您使用%ns时,由于null终止符,scanf将读取n+1字符到提供的缓冲区中。

使用大小为2的缓冲区(char ans[2];)并检查第一个字符(ans[0] == 'y')。当调用scanf时,您也不再需要获取ans的地址)。

相关内容

  • 没有找到相关文章

最新更新