ファイルから単語を単語ごとに読み取り、それらを配列に格納しようとしています。単語をうまくループしていることがわかりますが、配列を印刷しようとすると、格納されているのは単語ではなく、別のものです。この問題は、メモリ割り当てまたはポインターの逆参照に関連していると思います。
このような例で通常見られるように、構造体ノードのデータの前に * を削除しようとすると、すべての値に対して 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);
}
}