你好我们制作了一个程序,它插入3个结构链表(链表),插入名称,路径和持续时间,如代码所示
,但是当我运行该项目时,它停留在这一行:
fgets(n3->frame->name, 19, stdin);
我该如何解决这个问题?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Frame
{
char *name;
unsigned int duration;
char *path; // may change to FILE*
}*p , *p1,*p2;
typedef struct Frame frame_t;
struct Link
{
frame_t *frame;
struct Link *next;
}*n , *n1 ,*n2;
typedef struct Link link_t;
struct node *insert(struct node *n3);
int main()
{
printf("1\n");
insert(n);
printf("1\n");
}
struct node *insert(struct Link *n3)
{
while (n3 != NULL)
{
n3 = n3->next;
}
if (n3 == NULL)
{
n3 = (struct node *)malloc(sizeof(struct Frame)); //gives memory to the node
fgets(n3->frame->name, 19, stdin);
n3 = (struct node *)malloc(sizeof(struct Frame)); //gives memory to the node
fgets(n3->frame->path, 100, stdin);
n3 = (struct node *)malloc(sizeof(struct Frame)); //gives memory to the node
scanf("%d",&n3->frame->duration);
}
}
答案 0 :(得分:0)
fgets
的一些documentation说:
此函数从文件中读取尽可能多的行,当缓冲区已满(最大长度为1个字符),检测到行尾或检测到EOF或错误时停止。然后它存储一个NULL来终止字符串。
上面的代码没有编译(缺少一些include和typedef?),所以我不能自己执行它,但你是否正在做一些事情,比如确保在输入输入后点击“输入”?
如果你是,我相信你将面临许多其他问题。如何使用fgets
的一个示例是another回答,上面的代码中存在可疑的内容,例如为类型struct Frame
分配足够的内存,但将其转换为单独的类型并分配给第三个(struct Link
)。如果使用-Wall
并且通常会注意警告,我建议在编译步骤中添加gcc
标记。