c-逐行读取链接列表



我想把文本文件中的每一行放在链表中的节点中。我已经设法逐行写出了文本,但当我试图将这一行存储在节点中时,所有节点中只保存文本的最后一行。知道我做错了什么吗?

#include <stdio.h>
#include <stdlib.h>
struct list
{
    char *line;
    struct list *next;
};
int main(void)
{
    FILE *f;
    f = fopen("text.txt", "r");
    if (f == NULL) exit("ERRORn");
    struct list n1, n2, n3, n4;
    struct list *pointer = &n1;
        n1.line = NULL;
        n1.next = &n2;
        n2.line = NULL;
        n2.next = &n3;
        n3.line = NULL;
        n3.next = &n4;
        n4.line = NULL;
        n4.next = 0;
    int nodenr = 0;
    int buf[50];
    while(fgets(buf, sizeof(buf), f) != NULL)
    {
        printf("%s", buf);
        ++nodenr;
        if (nodenr == 1)
        {
            n1.line = buf;
        }
        else if (nodenr == 2)
        {
            n2.line = buf;
        }
        else if (nodenr == 3)
        {
            n3.line = buf;
        }
        else if (nodenr == 4)
        {
            n4.line = buf;
        }
    }
    while (pointer != 0)
    {
        printf("%sn", pointer->line);
        pointer = pointer->next;
    }
    fclose(f);
}

您的问题之所以出现,是因为所有节点的行指针都指向buf缓冲区,所以所有节点都会有您读取的最后一行。

读取缓冲区时,必须为每个节点分配一个缓冲区副本,而不是缓冲区指针本身。

我可能有问题
buf是指针,所以如果您更改fgets中的值,那么它会在任何地方更改
但在这种情况下,应该到处都是最后一行。。。

我在C编程方面不是很好,所以很抱歉,如果这是一个糟糕的答案

相关内容

  • 没有找到相关文章