I am trying to write a program that reads an unknown number of lines of an unknown length (using malloc
) and saves them into a structure.
When I try to print what I've saved in the structure, I get a Segmentation fault.
Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct line{
struct line* next_line;
char* data;
}line;
line* read_line(line* ptrLine, FILE* pFile);
int main(int argc, char *argv[])
{
if(argc < 2){
return 2;
}
FILE* pFile;
if((pFile = fopen(argv[1], "r")) == NULL){
return 1;
}
line* list_beginning = NULL;
line* curr_line;
curr_line = read_line(list_beginning, pFile);
while(1){
if(fgetc(pFile) == EOF) break;
fseek(pFile, -1, SEEK_CUR);
curr_line = read_line(curr_line, pFile);
}
//printf("%c", (list_beginning->data[0]));
/*while(curr_line->next_line != NULL){
unsigned int i = 0;
for(i = 0; i < strlen(curr_line->data); i++){
printf("%c", curr_line->data[i]);
}
}*/
fclose(pFile);
return 0;
}
line* read_line(line* ptrLine, FILE* pFile){
ptrLine = malloc(sizeof(line));
ptrLine->data = malloc(1024*sizeof(char));
int curr_position = 0;
char c;
while(1){
c = fgetc(pFile);
if(c == '\n' || c == EOF) {
*(ptrLine->data + curr_position) = '\0';
break;
}
*(ptrLine->data + curr_position) = c;
curr_position++;
}
ptrLine->next_line = NULL;
return ptrLine->next_line;
}