Which method can be used to read one line at a time from a file in C.
I have used fgets function also. but it's not working. it's reading space separated token only...
What to do ???
Which method can be used to read one line at a time from a file in C.
I have used fgets function also. but it's not working. it's reading space separated token only...
What to do ???
The fgets
function will read a single line from a file or num
characters where num
is the second parameter passed to fgets
. Are you passing a big enough number to read the line?
For Example
// Reads 500 characters or 1 line, whichever is shorter
char c[500];
fgets(c, 500, pFile);
Vs.
// Reads at most 1 character
char c;
fgets(&c,1,pFile);
use either fgets
if you know that your lines will fit into buffer or use fgetc
for more control over reading
If you are coding for a platform that has the GNU C library available, you can use getline():
This is more of a comment than a complete answer, but I don't have enough points to comment. :)
Here's the function prototype for fgets():
char *fgets(char *restrict s, int n, FILE *restrict stream);
It will read n-1 bytes or up to a newline or eof. For more info see:
http://www.opengroup.org/onlinepubs/009695399/functions/fgets.html
This should work, when you can't use fgets()
for some reason.
int readline(FILE *f, char *buffer, size_t len)
{
char c;
int i;
memset(buffer, 0, len);
for (i = 0; i < len; i++)
{
int c = fgetc(f);
if (!feof(f))
{
if (c == '\r')
buffer[i] = 0;
else if (c == '\n')
{
buffer[i] = 0;
return i+1;
}
else
buffer[i] = c;
}
else
{
//fprintf(stderr, "read_line(): recv returned %d\n", c);
return -1;
}
}
return -1;
}
Use fgets
to read from the line, and then use getc(...)
to chew up the newline or end-of-line to continue reading....here's an example of forever reading a line...
// Reads 500 characters or 1 line, whichever is shorter char c[500], chewup; while (true){ fgets(c, sizeof(c), pFile); if (!feof(pFile)){ chewup = getc(pFile); // To chew up the newline terminator // Do something with C }else{ break; // End of File reached... } }
Hope this helps, Best regards, Tom.
Use the following program for getting the line by line from a file.
#include <stdio.h>
int main ( void )
{
char filename[] = "file.txt";
FILE *file = fopen ( filename, "r" );
if (file != NULL)
{
char line [1000];
while(fgets(line,sizeof line,file)!= NULL) /* read a line from a file */
{
fprintf(stdout,"%s",line); //print the file contents on stdout.
}
fclose(file);
}
else
{
perror(filename); //print the error message on stderr.
}
return 0;
}
Source of Error:
Actually it was not my fault.. In this case . I was using strtok function and and accidently modified my original my original string. Hence while printing I was getting the error...
Thanks Everyone for Helping me.. :)