gpt4 book ai didi

c - C 段错误中的链表

转载 作者:太空宇宙 更新时间:2023-11-04 03:38:08 26 4
gpt4 key购买 nike

我在下面发布的代码出现段错误。我是 C 语言的新手,在使用它时遇到了一些麻烦。基本上在我的 main 中,我创建了一个 struct node* head(指向 struct 节点的指针)并将其分配给 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;
}

最佳答案

scanf 将在您使用 %ns 时将 n+1 字符读入提供的缓冲区,因为空终止符。

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

关于c - C 段错误中的链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30563972/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com