文本文件到链表 C
text-file to linked-list C
所以我正在尝试将文本文件保存在链表中(每个节点包含一个词),这就是我目前的代码。无论我做什么,它甚至 运行 都不会。如果可以请帮忙。
#include <string.h>
#include <ctype.h>
#define W 30000
#define M 35
typedef struct node {
char * str;
struct node * node ;
} Node;
typedef Node * ListofChar;
typedef Node * CharNode_ptr;
Node * createnode(char text[M]);
void letters(ListofChar * lst_ptr);
int main(void){
ListofChar chars = NULL;
letters(&chars);
return 0;
}
Node * createnode(char text[M]){
CharNode_ptr newnode_ptr ;
newnode_ptr = malloc(sizeof (Node));
strcpy(newnode_ptr->str, text);
printf("%s\n", newnode_ptr->str);
newnode_ptr -> node = NULL;
return newnode_ptr;
}
void letters(ListofChar * lst_ptr){
FILE *file;
char txt[M];
Node *ptr;
ptr=*lst_ptr;
file=fopen("Notebook.txt","r");
while ((fscanf(file,"%29s",txt) != EOF)){
if (strcmp(txt,"*")){
(*lst_ptr)=createnode(txt);
(*lst_ptr)->node=ptr;
ptr=*lst_ptr;}}
fclose(file);
return;
}
在 createnode
中,您有以下行:
newnode_ptr = malloc(sizeof (Node));
strcpy(newnode_ptr->str, text);
因为 newnode_ptr->str
从未被初始化,这是未定义的行为。尝试:
newnode_ptr = xmalloc(sizeof *newnode_ptr);
newnode_ptr->str = xstrdup(text);
其中 xmalloc
和 xstrdup
是 malloc
和 strdup
的明显包装器,它们在失败时中止。
所以我正在尝试将文本文件保存在链表中(每个节点包含一个词),这就是我目前的代码。无论我做什么,它甚至 运行 都不会。如果可以请帮忙。
#include <string.h>
#include <ctype.h>
#define W 30000
#define M 35
typedef struct node {
char * str;
struct node * node ;
} Node;
typedef Node * ListofChar;
typedef Node * CharNode_ptr;
Node * createnode(char text[M]);
void letters(ListofChar * lst_ptr);
int main(void){
ListofChar chars = NULL;
letters(&chars);
return 0;
}
Node * createnode(char text[M]){
CharNode_ptr newnode_ptr ;
newnode_ptr = malloc(sizeof (Node));
strcpy(newnode_ptr->str, text);
printf("%s\n", newnode_ptr->str);
newnode_ptr -> node = NULL;
return newnode_ptr;
}
void letters(ListofChar * lst_ptr){
FILE *file;
char txt[M];
Node *ptr;
ptr=*lst_ptr;
file=fopen("Notebook.txt","r");
while ((fscanf(file,"%29s",txt) != EOF)){
if (strcmp(txt,"*")){
(*lst_ptr)=createnode(txt);
(*lst_ptr)->node=ptr;
ptr=*lst_ptr;}}
fclose(file);
return;
}
在 createnode
中,您有以下行:
newnode_ptr = malloc(sizeof (Node));
strcpy(newnode_ptr->str, text);
因为 newnode_ptr->str
从未被初始化,这是未定义的行为。尝试:
newnode_ptr = xmalloc(sizeof *newnode_ptr);
newnode_ptr->str = xstrdup(text);
其中 xmalloc
和 xstrdup
是 malloc
和 strdup
的明显包装器,它们在失败时中止。