需要帮助打印链表的内容

时间:2011-04-28 22:45:47

标签: c visual-studio-2010 dictionary linked-list printf

我需要创建一个读取文件的程序,并将所有单词放在“字典”中,以及它们出现的频率和单词总数。例如,如果文件读取

Hello, my name is Robert! My name is cool...

输出将是

hello 1
my 2
name 2
is 2
robert 1
cool 1
The total number of words is 9.

但是,我的函数只打印单词的总数,而不是单词本身。对不起,如果这是一个微不足道的问题,但我是C的新手。

这是代码 -

http://pastebin.com/Nb30q965

2 个答案:

答案 0 :(得分:1)

您的代码存在各种问题。例如,在new_entry()函数中,您将一些新的malloc内存的地址分配给newentry->string,但是您要立即将原始字符串的地址分配给它。这会导致内存泄漏(您永远无法返回到malloc内存)。你正在做strcpy(temp->string, word),但他们现在正指着相同的记忆!所以你要把字符串复制到自己身上。

还有其他问题(例如在第80行上使用=而不是==)。

答案 1 :(得分:1)

您的代码在add_to_dictionary方法中存在错误。

问题#1:第80行应该更改为if(stringcompare == 0)(你缺少一个=,这使得它成为一个赋值。在执行后,stringcompare将为0而不是检查它是否为0.赋值的结果是分配的值,0在C)中等于false。

问题#2:你的循环只检查列表中的第一项。你需要删除其他人。

问题#3:第90行和第91行不应该在循环中。第92行的右括号关闭了循环。

问题#4:在new_entry中,您应该{string}的值memcpystrcpy,而不是分配它。分配指针使其指向新地址。您要做的是使当前地址具有与其他字符串相同的内容。为此,您需要遍历旧内存并逐个元素地复制到新内存中。由于你做了很多,有人写了一个函数,将为你做(strcpymemcpy,如前所述)。

我没有多检查其余代码,因此无法保证此列表是详尽无遗的。