这是我使用trie.c和trie.h创建的主文件。该程序的目的是存储字典文件中的单词。
var section = document.querySelector('section');
section.querySelectorAll('.foo').forEach(function(e) {
console.log(e);
})
。 。 。 。
node* x = (node*)malloc(sizeof(node));
x = insert("bb", x);
x = insert("sdf", x);
x = insert("df", x);
x = insert("bbbb", x);
printAllWords(x);
。 。 。
我的输出是
while (fgets(word, MAX_WORD, file) != NULL) {
if (word[strlen(word)-1] == '\n') { // remove '/n' at the last
word[strlen(word)-1]='\0';
}
printf("print word : %s \n" , word);
printf("length : %d \n" , (int) strlen(word));
dictionary = insert(word, dictionary);
}
dictionary = insert("PLEASE", dictionary);
dictionary = insert("zzz", dictionary);
printAllWords(dictionary);
如您所见,我的插入方法适用于纯字符串,例如“zzz”,但我不知道为什么它不适用于从文件中提取的单词....你能帮助我吗?
答案 0 :(得分:0)
我猜你的node
就像:
struct
{
char *word;
// Left and right pointers, etc
} node;
而且insert(char const *newWord)
有:
thisNode->word = newWord;
如果按照指针分配,循环中的所有新单词都指向相同的内存地址。快速而肮脏的修复是:
struct
{
char word[MAX_WORD_LENGTH];
// Left and right pointers, etc
} node;
而且insert(char const *newWord)
有:
strcpy(thisNode->word, newWord);
这会将每个单词存储在一个单独的缓冲区中。