I need to parse data from a csv file but for some reason I'm getting a segmentation fault error. I have exactly 5 comma separated fields on each line so I wanted to use an array of pointers to hold each field.
Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 300
typedef struct{
char *name, *county;
float grade;
unsigned long int year, number;
}info;
int main(int argc, char **argv)
{
FILE *fin = fopen("lab3.txt", "r");
if(!fin)
{
fprintf(stderr, "ERROR OPENING THE FILE.\n");
exit(1);
}
char buf[MAX];
while(fgets(buf, MAX, fin))
{
buf[strcspn(buf,"\n")] = '\0'; // remove the trailing newline
char *fields[6], *word = strtok(buf, ",");
while(word)
{
int i = 0;
fields[i] = word;
info *array = (info *)malloc(sizeof(info));
array->name = (char *)malloc(sizeof(char));
array->county = (char *)malloc(sizeof(char));
array->name = strdup(fields[2]);
array->county = strdup(fields[3]);
array->grade = atof(fields[0]);
array->year = atoi(fields[1]);
array->number = atoi(fields[4]);
printf("Year : %s | Grade : %s | Number: %s", fields[1], fields[0], fields[5]);
free(array);
//printf("Word : %s\n", fields[i]);
word = strtok(NULL,",");
i++;
free(array->name);
free(array->county);
}
}
fclose(fin);
return 0;
}
I'm allocation memory to array, array->name and array->county so I don't know why this is happening. I also used gdb and found the problem at line 36 but everything seems okay. Any ideas?