将2个值插入链接列表节点

时间:2014-09-08 13:19:47

标签: c memory-management linked-list dynamic-memory-allocation

我正在使用一个链接列表,其结构如下所示:

struct theStruct{
    int variable1;
    char* variable2;
    struct theStruct* next;
};

如您所见,我想在每个节点中插入两个变量。我遇到的问题是我目前正在读取文本文件,变量1在行的开头获得,变量2在最后获得,所以我无法将它们同时放入(至少不是我意识到)。这就是我写的,但没有成功。

...
reading file
....
 while(token != NULL)
    {
        if(counter == 1)
        {
            newToken = token;
        }

        if(counter == 3)
        {
            temp = (theStruct*)malloc(sizeof(theStruct));
            temp->variable1= atoi(token);
            temp->variable2 = newToken;
            temp->next = head;
            head = temp;
        }
...

之后当我尝试打印时,我只得到temp-> variable1的值,而temp-> variable2包含一些奇怪的字符。 我想以某种方式保存第一个变量,直到我得到我的其他变量而不为temp分配新的内存,但我不知道如何做到这一点。我希望我能为你们提供足够的信息,给我一些关于如何解决问题的线索或线索。

2 个答案:

答案 0 :(得分:2)

当你说:

temp->variable2 = newToken;

你指的是temp->variable2在你第一次传递给strtok()的任何地方的中间 - 这很可能会被覆盖。你可能想要复制它:

temp->variable2 = strdup(newToken);

这是一些人觉得strtok()充满危险的一个原因。

答案 1 :(得分:0)

我假设您正在为文件中的多行执行此操作。 考虑一下这些行的程序::

if open file fails die a horrible death
init linked list
while fgets from file a whole line != NULL {
    temp = malloc(sizeof(things));
    token = strtok(line, "!");
    while (token != NULL) {
        decide where to insert token in temp->XXXX
        token = strtok(NULL, "!");
    }
    insert temp into your linked list (probably)
}