#define MAXROW 30
typedef struct emp_info {
int emp_id;
char *name;
char *dept;
int salary;
} emp_info;
void store(emp_info *data, char *filename);
int main(int argc, char **argv)
{
int preceding;
int following;
emp_info data[MAXROW] ;
// emp_info data[MAXROW] = {{.salary = 0 }};
char *filename = "dat/emp_info.csv";
store(data,filename);
return 0;
}
void store(emp_info emp_arr[], char *filename)
{
size_t n = 0;
char *line;
FILE *csv_stream;
if((csv_stream = fopen(filename,"r")) == NULL){
fprintf(stderr,"file open for reading failed. exit!\n");
exit(EXIT_FAILURE);
}
while ( n < MAXROW && (fgets(line,sizeof line, csv_stream)) != NULL)
{
emp_info tmp;
if(sscanf(line,"%d,%29[^,],%29[^,],%d",
&tmp.emp_id,tmp.name,tmp.dept,&tmp.salary) != 4)
{
fprintf(stderr,"error: failed to parse string.\n");
exit(EXIT_FAILURE);
}
emp_arr[n++] = tmp;
}
if(fclose(csv_stream) == EOF)
perror("stream error-csv_stream.");
}
ERROR: Segmentation fault (core dumped)
Idea is trying to get values from csv file(less than 10 rows) to array of struct emp_info.
code link: https://godbolt.org/z/h5h1K11T6
update
emp_info.csv :
1,alice,depa,1000
2,bob,depa,2000
3,carol,depb,1501
4,david,depa,1200
5,ed,depc,1306
After fix segment fault, now the issue is parse csv content. Now the error is fail to parse string.
I feel like my sscanf pattern should work. But it doesn't.
I also tried:
if(sscanf(line,"%d,%19[^,],%19[^,],%d\n",
&tmp.emp_id,tmp.name,tmp.dept,&tmp.salary) != 4)
But still cannot parse csv content.