我正在尝试将文本文件中的单词转换为链表。
FILE *f = fopen("test.txt","r");
while (fgets( line, sizeof(line), f ))
for (word = strtok(line, " "); word; word = strtok(NULL, " "))
{
temp->data=word;
temp->next=(node *) malloc(sizeof(node));
printf("%s\n",word); // this prints the words correctly
temp=temp->next;
}但是当我从链表的开头列出单词时,它们是不正确的。我想是关于strtok的?
发布于 2010-12-09 07:02:09
您将文件的行读入到一个单独的缓冲区中,每行都重用这个缓冲区-- line。
strtok返回一个指向它所操作的缓冲区的指针。
您无需复制字符串即可将strtok的结果存储到链表中。
当您读取下一行时,指针仍然指向该行中的同一位置,但现在该行中有不同的数据。你不会得到你想要的。
要修复它,您需要将结果复制(使用strcpy或类似的方法)到链表的缓冲区中。如果您有可用的strdup,您可能想要使用它。
发布于 2010-12-09 07:02:07
您正在将temp->data设置为word指针。这不会复制单词。strtok()会更改缓冲区,因为您只会指向单词,而不是复制它,所以您也会看到这些更改。
如果你想保留它,可以复制一份word。
发布于 2010-12-09 07:02:48
不是strtok。您不能将每个单词复制到其他位置。因此,您要将指向单词的指针保留在line中,然后下一次调用fgets时,将用下一行字符覆盖指向的数据
https://stackoverflow.com/questions/4393199
复制相似问题