I was reading a linked list from a .txt file to fill the following node:
typedef struct node {
int data;
char* line;
struct node* next;
} NODE;
The code works fine and reads the file into the linked list. I print out the string while each node is being initialized. However whenever I call the printList()
function, the line
string is always a garbage value. Sample run:
./a.out linkedlisttext.txt
data in readFile(): 4
string in readFile(): Hello world
address in readFile(): 0x1326067a0
data in readFile(): 28
string in readFile(): What is up world???
address in readFile(): 0x1326067c0
data in readFile(): 2124
string in readFile(): your mother
address in readFile(): 0x1326067e0
data in readFile(): 85
string in readFile(): more data
address in readFile(): 0x132606800
data in readFile(): 9421
string in readFile(): just a little more data
address in readFile(): 0x132606820
data in readFile(): 992
string in readFile(): are we almost there?
address in readFile(): 0x132606840
data in readFile(): 301
string in readFile(): we did it!
address in readFile(): 0x132606860
DATA: 4 | STRING �g`2
address in printList(): 0x1326067a0
DATA: 28 | STRING �g`2
address in printList(): 0x1326067c0
DATA: 2124 | STRING �g`2
address in printList(): 0x1326067e0
DATA: 85 | STRING h`2
address in printList(): 0x132606800
DATA: 9421 | STRING 0h`2
address in printList(): 0x132606820
DATA: 992 | STRING Ph`2
address in printList(): 0x132606840
DATA: 301 | STRING
address in printList(): 0x132606860
Here is linkedlisttext.txt
4, Hello world
28, What is up world???
2124, your mother
85, more data
9421, just a little more data
992, are we almost there?
301, we did it!
and here is the code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct node {
int data;
char* line;
struct node* next;
} NODE;
struct node* readFile(FILE* fp, NODE* root) {
char line[100];
char* token;
NODE* curr;
NODE* prev;
while(fgets(line, 100, fp) != NULL) {
curr = malloc(sizeof(struct node*));
token = strtok(line, ",");
curr->data = atoi(token);
printf("\ndata in readFile(): %d\n", curr->data);
token = strtok(NULL, "");
curr->line = (char*) malloc(sizeof(token) + 1);
strcpy(curr->line, token);
printf("string in readFile(): %s", curr->line);
printf("address in readFile(): %p\n\n", curr->line);
curr->next = NULL;
if(root == NULL) {
root = curr;
} else {
NODE* travel = root;
while(travel->next != NULL) {
travel = travel->next;
}
travel->next = curr;
}
}
return root;
}
void printList(NODE* root) {
struct node* temp = root;
while(temp->next != NULL) {
printf("DATA: %4d | STRING %s\n", temp->data, temp->line);
printf("address in printList(): %p\n", temp->line);
temp = temp->next;
}
printf("DATA: %4d | STRING %s\n", temp->data, temp->line);
printf("address in printList(): %p\n", temp->line);
}
int main(int argc, char** argv) {
FILE* fp = fopen(argv[1], "r");
NODE* root = NULL;
if(fp == NULL) {
return 0;
}
root = readFile(fp, root);
printList(root);
}
Any help is appreciated, thanks!