从文件到链表读取未知数量的int

时间:2016-01-03 22:47:27

标签: c memory dynamic linked-list realloc

我试图从文件中读取未知数量的整数,并将它们存储在链表中的int指针中:

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吗?

1 个答案:

答案 0 :(得分:0)

正如其他人指出的那样,你的代码没有利用链表,因此看起来有点奇怪,但由于我不知道你的整体设计,我将专注于你提交的代码。

您缺少变量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++;
}

请注意fscanf()需要指向存储整数的内存的指针,因此您应该使用&nouveauBCP->schedule[i]