Сначала проверьте возвращаемое значение fopen()
независимо от того, успешно оно или нет.открыть справочную страницу fopen()
.например,
f1 = fopen("text.txt", "r");
if(f1 == NULL ) {
fprintf(stderr,"file doesn't exist \n");
return 0;
}
Во-вторых, прочитайте, почему feof()
здесь не так /5459862/pochemu-while-feof-file-vsegda-neverno Вместо этого проверьте возвращаемое значение fscanf()
.например,
while (fscanf (f1, "%s", str) == 1) {
insertFirst(str);
}
Также не требуется указывать тип malloc
.вот пример кода
struct node {
char nodename[500];
struct node *next;
};
struct node *head = NULL;
struct node *current = NULL;
void insertFirst(char* name) {
struct node *link = malloc(sizeof(struct node)); /* create new node by dynamic memory */
strcpy(link->nodename,name); /* copy the data */
link->next = head;
head = link; /* update the head every time */
}
void printList(void) {
struct node *temp = head; /* assign head to temp & do operation, don't modify head here since head is declared globally */
while(temp) {
printf("name : %s \n",temp->nodename);
temp = temp->next;
}
}
int main(void) {
char str[500];
FILE *f1 = fopen("text.txt", "r");
if(f1 == NULL ) {
fprintf(stderr,"file doesn't exist \n");
return 0;
}
while (fscanf (f1, "%s", str) == 1) { /* it returns no of items readon success */
insertFirst(str);/* pass the str read from file to insertFirst() function */
}
fclose(f1);
printList();
return 0;
}