A working solution is given in the answer from sokkyoku.
Another possibility to read variable length lines is to use strtok like in the following code snippet:
int getlines (FILE *fin)
{
int nlines = 0;
int count = 0;
char line[BUFFSIZE]={0};
char *p;
if(NULL == fgets(buff, BUFFSIZE, fin))
return -1;
while(fgets(line, BUFFSIZE, fin) != NULL) {
//Remove the '\n' or '\r' character
line[strcspn(line, "\r\n")] = 0;
count = 0;
printf("line[%d] = %s\n", nlines, line);
for(p = line; (p = strtok(p, " \t")) != NULL; p = NULL) {
printf("%s ", p);
++count;
}
printf("\n\n");
++nlines;
}
return nlines;
}
Explanation of the above function getlines
:
Each line in the file fin
is read using fgets
and stored in the variable line
.
Then each substring in line
(separated by a white space or \t
character) is extracted and the pointer to that substring stored in p
, by means of the function strtok
in the for loop (see for example this post for further example on strtok).
The function then just print p
but you can do everything with the substring here.
I also count (++count
) the number of items found in each line. At the end, the function getline
count and returns the number of lines read.