У меня есть текстовый файл и способ прочитать слово из текстового файла. Это слово сохраняется в массиве символов, а затем отправляется функции для сохранения в узле дерева. После этого слово сбрасывается, и процесс начинается заново. Однако, когда я проверяю дерево, все узлы ссылаются на одну и ту же строку.
Получить слово:
node* run(node* root)
{
char c;
int index = 0;
char word[100];
fp = fopen("text.txt","rt");
do
{
c = (char)fgetc(fp);
if(c == ' ' || c == '\n' || c == '\0' || c == '\t' || c == ',' || c == ';' || c == '.' || c == '?' || c == '!' || c == ':')
{
root = insert(root, word);
word[0] = 0;
index = 0;
}
else
{
word[index++] = c;
word[index] = 0;
}
}while(c != EOF);
fclose(fp);
return root;
}
Сделайте что-нибудь со словом во вставке:
node* insert(node* N, char* key)
{
/* 1. Perform the normal BST rotation */
if (N == NULL)
return(newNode(key));
...
}
Создайте новый узел из строки:
node* newNode(char* string)
{
node* newNode = (node*) malloc(sizeof(node));
newNode->data = string;
newNode->left = NULL;
newNode->right = NULL;
newNode->height = 1; //Height of a leaf is one
return(newNode);
}
Однако после того, как я добавил новый узел и сбросил свое слово, значение данных в корне изменилось на то, на что изменилось исходное слово... Я предполагаю, что с указателями происходит что-то странное? По сути, как мне присвоить newNode->data значению строки В ТЕКУЩИЙ МОМЕНТ вместо ее значения на всю вечность.
int c; ... c = fgetc(fp); if (c == EOF || c == ' ' || c == '\n' ...)
. Текущий код отображаетEOF
в 1 изchar
. - person chux - Reinstate Monica   schedule 22.10.2014