fgets

From cppreference.com
< c‎ | io

Defined in header <stdio.h>
char *fgets( char          *str, int count, FILE          *stream );
(until C99)
char *fgets( char *restrict str, int count, FILE *restrict stream );
(since C99)

Reads at most count - 1 characters from the given file stream and stores them in str. The produced character string is always null-terminated. Parsing stops if end-of-file occurs or a newline character is found, in which case str will contain that newline character.

Contents

[edit] Parameters

str - string to read the characters to
count - the length of str
stream - file stream to read the data from

[edit] Return value

str on success, NULL on failure.

If the failure has been caused by end-of-file condition, additionally sets the eof indicator (see feof()) on stream. If the failure has been caused by some other error, sets the error indicator (see ferror()) on stream.

[edit] Example

fgets with error checking

#include <stdio.h>
#include <stdlib.h>
 
int main(void)
{
    FILE* tmpf = tmpfile();
    fputs("Alan Turing\n", tmpf);
    fputs("John von Neumann\n", tmpf);
    fputs("Alonzo Church\n", tmpf);
 
    rewind(tmpf);
 
    char buf[8];
    while (fgets(buf, sizeof buf, tmpf) != NULL)
          printf("\"%s\"\n", buf);
 
    /* Test reason for reaching NULL. */
    if (feof(tmpf))          /* if failure caused by end-of-file condition */
       puts("End of file reached");
    else if (ferror(tmpf))   /* if failure caused by some other error      */
         {
            perror("fgets()");
            fprintf(stderr,"fgets() failed in file %s at line # %d\n", __FILE__,__LINE__-9);
            exit(EXIT_FAILURE);
         }
 
    return EXIT_SUCCESS;
}

Output:

"Alan Tu"
"ring
"
"John vo"
"n Neuma"
"nn
"
"Alonzo "
"Church
"
End of file reached

[edit] See also

reads formatted input from stdin, a file stream or a buffer
(function)
(until C11)
reads a character string from stdin
(function)
writes a character string to a file stream
(function)
C++ documentation for fgets