我正在使用一个链接列表,其结构如下所示:
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分配新的内存,但我不知道如何做到这一点。我希望我能为你们提供足够的信息,给我一些关于如何解决问题的线索或线索。
答案 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)
}