我正在尝试逐字读取文件中的单词并将它们存储在数组中。我看到我正在循环遍历单词,但是当我尝试打印数组时,它存储的不是单词而是其他东西。我认为问题与内存分配或取消引用指针有关。
如果我尝试删除 struct 节点中的 * before 数据,这是我通常在这样的示例中看到的,我得到的所有值都是 null。有人对可能出现的问题有任何想法吗?我对 C 很陌生,所以我知道代码可能不是那么好。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct node
{
struct node *next;
char *data;
};
struct node *head, *ptr, *temp;
void display();
void words(char filename[]);
int main(void)
{
char fname[99];
head = (struct node *)malloc(sizeof(struct node));
head->data = NULL;
head->next = NULL;
printf("\nEnter file name: \n");
scanf("%s", fname);
words(fname);
return 0;
}
void words(char filename[]){
printf("o hi!, %s\n",filename);
//open the file
FILE *file = fopen(filename, "r");
char *word;
char string[50];
while (fgets(string,50,file)){
word=strtok(string, " \n");
do {
printf("Oh hi!, %s\n",word);
temp = (struct node *) malloc(sizeof(struct node));
temp->data = word;
temp->next = head->next;
head->next = temp;
printf("!!!%s\n",temp->data);
//insert_front(word);
} while (word=strtok(NULL," \n"));
}
display();
}
void display()
{
ptr = head;
while(ptr->next != NULL)
{
ptr = ptr->next;
printf("%s\n ", ptr->data);
}
}