C 从文件到链表读取未知的整数量
我试图从文件中读取未知数量的整数,并将其存储在链接列表中的整数指针中:C 从文件到链表读取未知的整数量,c,memory,dynamic,linked-list,realloc,C,Memory,Dynamic,Linked List,Realloc,我试图从文件中读取未知数量的整数,并将其存储在链接列表中的整数指针中: typedef struct BCP BCP; struct BCP { int *schedule; BCP *next; }; 然后,假设nouveauBCP是一个节点: nouveauBCP->schedule = (int *) malloc(sizeof(int)); fscanf(P,"%d", &nouveauBCP->schedule); printf("%d |"
typedef struct BCP BCP;
struct BCP
{
int *schedule;
BCP *next;
};
然后,假设nouveauBCP
是一个节点:
nouveauBCP->schedule = (int *) malloc(sizeof(int));
fscanf(P,"%d", &nouveauBCP->schedule);
printf("%d |",nouveauBCP->schedule);
while (fgetc (P) != '\n')
{
nouveauBCP->schedule = (int*)realloc(nouveauBCP->schedule, sizeof(int));
fscanf(P,"%d", nouveauBCP->schedule[i]);
printf("%d-", nouveauBCP->schedule[i]);
i++;
}
如何在`nouveauBCP->schedule[i]中访问读写?甚至可以在链表中使用realloc吗?正如其他人指出的那样,您的代码没有利用链表,因此看起来有点奇怪,但由于我不知道您的总体设计,我将集中讨论您提交的代码 您缺少变量
i
的初始化,并且您的realloc()不会增加schedule
字段所指向的内存量。
我接受了您提供的代码并添加了一些更正:
nouveauBCP->schedule = (int *) malloc(sizeof(int));
fscanf(P,"%d", &nouveauBCP->schedule);
printf("%d |",nouveauBCP->schedule);
int i = 0; //initialize i variable
while (fgetc (P) != '\n')
{
if(i>1) // we do not want to reallocate if i is less than 1
{
nouveauBCP->schedule = (int*)realloc(nouveauBCP->schedule, i*sizeof(int));
}
fscanf(P,"%d", &nouveauBCP->schedule[i]); //fscanf needs a pointer to memory
printf("%d-", nouveauBCP->schedule[i]);
i++;
}
请注意,需要一个指向存储整数的内存的指针,因此您应该使用
&nouveauBCP->schedule[i]
提示:您的代码不使用next
,因此您有理由误解“链表”是什么。请继续学习您的算法和数据结构书籍。您当然可以realloc
(在链接列表中使用它的事实是无关紧要的)。但是当然,每次使用与您相同的大小realloc
是没有意义的-大小需要增加。您的代码还存在其他主要问题,但除非您显示完整的代码,否则对其进行注释是没有效果的。您需要决定是尝试使用链接列表还是数组。链表为您提供了为每个节点分配的自由,但这显然不是您在这里要做的。链表是指每个节点都有一个int值,并且下一个指针指向列表中的下一个元素。也就是说,在每次迭代中,您将为一个新节点分配空间,并在该节点中设置调度(应该是int,而不是指向int的指针)。您创建的第一个节点将成为列表的标题,因此请将其存储在变量中。然后您需要列表的当前尾部,以便能够在while循环中将新元素添加到列表的末尾。有很多bug!例如,&nouveauBCP->schedule
应该是nouveauBCP->schedule
,为了清晰起见,最好写为&nouveauBCP->schedule[0]
。然后,使用fgetc
读取的字符将要到哪里?如果realloc
失败怎么办?realloc
不应该是(i+1)*sizeof(int)
?我给出的代码不完整,我缺少的是&nouveauBCP->schedule[0]
,我认为realloc
的参数是新块的大小,无论如何非常感谢,我感谢您的帮助:)