我正在处理一个链表,它的结构如下:
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->variable 2包含一些奇怪的字符。我想以某种方式保存第一个变量,直到我得到另一个变量,而不为temp分配新的内存,但我不知道如何做到这一点。我希望我给了你们足够的信息,给我一些线索或线索来解决我的问题。
当你说:
temp->variable2 = newToken;
您将temp->variable2
指向第一次传递给strtok()
的内容中间的某个位置——这很可能是将被覆盖的内容。你可能想复制它:
temp->variable2 = strdup(newToken);
这也是一些人认为strtok()充满危险的原因之一。
我假设您对文件中的多行执行此操作。按照以下思路考虑一个程序::
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)
}