gpt4 book ai didi

c - fgets() 在 C 中从 stdin 接收输入的段错误

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

我的 gdb 调试器出现问题,每次我尝试运行该程序时,调试器都会在我使用“fgets”() 的行发出以下错误:_IO_fgets (buf=0x7fffffffe330 "P\343\377\377\377\177", n=2, fp=0x0)

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

typedef struct _node {
int value ;
struct _node * next ;
} node ;

void print_avg(node * head, int n)
{
int sum = 0 , i = 0;
node * p = head ;
for (i = 0 ; i < n ; i++) {
sum += p->value ;
p = p->next ;
}
printf("%f\n", ((float)sum / (float)n)) ;
}

int get_nums(node ** head)
{
int n = 1 ;
char line[4] ;

while (fgets(line, sizeof(line), stdin) != NULL) {
//strtok(line, "\n") ;

node * curr ;
curr = (node *) malloc(sizeof(node)) ;
curr->value = atoi(line) ;
curr->next = *head ;
*head = curr ;

n++ ;
}
return n ;
}


int main()
{
int n ;
node * head = NULL;

n = get_nums(&head) ;
print_avg(head, n) ;
return 0 ;
}

我不知道我的 fgets() 有什么问题。有人有想法吗?

最佳答案

你对 fgets 的用法在我看来是正确的,但你的代码中还有另一个问题:n 差了一个。

替换

int n = 1;

通过

int n = 0;

因为最初列表包含 0 个元素,而不是 1 个元素。

但无论如何这样更好:

你应该在你的 for 循环中使用它。

for (node * p = head; p != NULL; p = p->next)

该列表由 next 字段中的 NULL 指针终止。因此,您应该检查这个条件,而不是测试元素的数量。

关于c - fgets() 在 C 中从 stdin 接收输入的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43868956/

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