Я читаю текстовый файл в UTF-8, используя fgetc и разделяя слова. Я сделал функцию добавления, чтобы добавить каждое слово в связанный список, но когда я распечатываю адрес слов, они все одинаковые, указывая, что они просто перезаписываются. Как правильно добавить данные в мой список?
Я также сделал запрет на печать, чтобы просмотреть список, и хотя данные правильно выводятся в моей функции добавления, функция печати просто выдает значение мусора.
struct node
{
void *data;
struct node *next;
};
Я набираю def для этого файла connected_list
Я вызываю функцию добавления в моей главной записи каждый раз, когда получаю новое слово.
void append(linked_list *list, void *word)
{
if(list->data == NULL)
{
list->data = word;
list->next = NULL;
//printf("WORD: %s\n", (char *)list->data);
//printf("ADDRESS %p\n", list->data);
}
else
{
linked_list *new_node;
new_node = malloc(sizeof(linked_list));
new_node->data = word;
new_node->next = NULL;
while(list->next != NULL)
{
if(list->next == NULL)
{
list->next = new_node;
}
}
//printf("WORD: %s\n", (char *)list->data);
//printf("ADDRESS %p\n", list->data);
}
}
А вот моя функция печати
void print_list(linked_list *list) {
if(list == NULL)
{
printf("Print: the list is empty!\n");
}
while (list != NULL) {
printf("DATA %s\n", (char *)list->data);
list = list->next;
}
}
Я ожидаю, что функция печати напечатает
'DATA the_word' для всех слов, но я получаю 'DATA �'
Печать в функции добавления дает:
WORD: The
ADDRESS 0x55b6fa2314b0
WORD: Project
ADDRESS 0x55b6fa2314b0
WORD: Gutenberg
ADDRESS 0x55b6fa2314b0
WORD: EBook
ADDRESS 0x55b6fa2314b0
WORD: of
ADDRESS 0x55b6fa2314b0
WORD: Pride
ADDRESS 0x55b6fa2314b0
WORD: and
ADDRESS 0x55b6fa2314b0
WORD: Prejudice,
ADDRESS 0x55b6fa2314b0
WORD: by
ADDRESS 0x55b6fa2314b0
WORD: Jane
ADDRESS 0x55b6fa2314b0
WORD: Austen
ADDRESS 0x55b6fa2314b0