指针和链表节点创建错误

error with pointers and linked list node creation

我正在尝试从文件中读取行输入,正确解析该行,并将该行的三个信息字段添加到链表中的节点。

这是我从文件中读取的函数:

int readFile(char* file)
{
    FILE *fp = fopen(file,"r");

    char ch;
    char line[50];
    char string1[100];
    char string2[100];
    char string3[100];
    char endLine[2];

    int i = 0;
    while(fscanf(fp, "%[^\t]\t%[^\t]\t%[^\n]", string1, string2, string3) == 3)
    {
        printf( "%s\t%s\t%s\n", string1, string2, string3);
        addNode(string1, string2, string3, head, tail);
    }

    printNodes();
    fclose(fp);
    return 0;
}

这是我的 addNode 函数:

// create stuff
Entry *entry = malloc(sizeof(Entry));
entry->name     = string1;
entry->address  = string2;
entry->number   = string3;

Node* node = malloc(sizeof(Node));
node->entry = entry;
node->next = NULL;

// Empty list
if(head->next == NULL)
{
    head->next = node;
}

// Else, add to the end of the list
else
{
    Node* temp = head->next;
    while(temp->next!= NULL) 
    {
        temp = temp->next;
    }

    temp->next = node;
}

我在调用 printNodes 时遇到问题,只有最后读取的节点信息被打印 X 次,其中 X 是我应该拥有的唯一节点的数量。我想我遇到了一个问题,每次我创建一个新节点时我都会覆盖一个旧节点,但我不完全确定,因为这是我第一次使用原始 C 代码。

再次感谢!

编辑: 这是 printNodes() 函数:

int printNodes(Node* head)
{
    Node *temp = head->next;

    while(temp->next != NULL)
    {
        printf("\n%s\t%s\t%s\n", temp->entry->name, temp->entry->address, temp->entry->number);
        temp = temp->next;
    }

    return 0;
}

您的问题在这里:

entry->name     = string1;
entry->address  = string2;
entry->number   = string3;

您正在为每个节点提供相同的内存位置。这些字符串包含您在调用 printNodes().

时读入的 last