Я пытаюсь создать три в C, загрузить словарь в три, прямо сейчас, но у меня возникают проблемы с изменением структуры.
У меня есть функция, которая создает пустой узел, прямо сейчас, и это, кажется, работает нормально.Основная функция просматривает файл словаря и вызывает функцию «вставки» следующим образом:
while (ftell(inptr) < endIndex)
{
fscanf(inptr,"%[^\n]", word);
printf("%s\n", word);
//main insert function
insert(word, root);
//skips past this word
fseek(inptr, 1, SEEK_CUR);
}
Это сразу же выполняется тестом, в котором я пытаюсь определить значение логического значения в "Значение "trie".
printf("%i\n", (int)(root -> ptr[0] -> isEnd));
Но это приводит к ошибке, потому что указатель корня, по-видимому, нулевой (доступ к элементу внутри нулевого указателя типа 'struct node').
Реализацияфункции insert
выглядит следующим образом.
bool insert(char *word, struct node *root)
{
if (strcmp(word, "") == 0)
{
for (int i = 0, size = 27; i < size; i++)
{
root -> ptr[i] = NULL;
}
root -> isEnd = true;
return false;
}
else
{
//gets the first letter of the word
char firstLetter = word[0];
//figures out which place in the array it goes
int firstLetterInt;
if (isalpha(firstLetter))
{
firstLetterInt = firstLetter - 'a';
}
else
{
firstLetterInt = 26;
}
//gets the rest of the word
char *subbuff = calloc(45,1);;
memcpy(subbuff, &word[1], strlen(word) - 1);
subbuff[strlen(word)] = '\0';
if(!(root -> ptr[firstLetterInt]))
{
root -> ptr[firstLetterInt] = blankNode();
}
insert(subbuff, root -> ptr[firstLetterInt]);
free(subbuff);
return true;
}
}
Я понимаю, что должен использовать указатели и тому подобное, но я поиграл с этим и не могу заставить его работать,Я даже пытался передать узлы как struct node **root
, но, похоже, появилась та же проблема.Другая странная вещь заключается в том, что во время цикла while они, кажется, распознают вставки, потому что, когда вставляется «caterpillar», «c», «a» и «t» не создаются как новые узлы.