Namespaces
Variants
Actions

fgets

From cppreference.com
< c‎ | io
 
 
File input/output
Types and objects
        
Functions
File access
Unformatted input/output
(C95)(C95)
(C95)
(C95)(C95)
(C95)
(C95)
(C95)
(C95)

Formatted input
 
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 the character array pointed to by str. Parsing stops if a newline character is found (in which case str will contain that newline character) or if end-of-file occurs. If bytes are read and no errors occur, writes a null character at the position immediately after the last character written to str.

[edit] Parameters

str - pointer to an element of a char array
count - maximum number of characters to write (typically the length of str)
stream - file stream to read the data from

[edit] Return value

str on success, null pointer on failure.

If the end-of-file condition is encountered, sets the eof indicator on stream (see feof() ). This is only a failure if it causes no bytes to be read, in which case a null pointer is returned and the contents of the array pointed to by str are not altered (i.e. the first byte is not overwritten with a null character).

If the failure has been caused by some other error, sets the error indicator (see ferror() ) on stream. The contents of the array pointed to by str are indeterminate (it may not even be null-terminated).

[edit] Notes

POSIX additionally requires that fgets sets errno if a read error occurs.

Although the standard specification is unclear in the cases where count <= 1, common implementations do

  • if count < 1, do nothing, report error,
  • if count == 1,
  • some implementations do nothing, report error,
  • others read nothing, store zero in str[0], report success.

[edit] Example

Run this code
#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);
 
 if (feof (tmpf))
 puts ("End of file reached");
}

Output:

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

[edit] References

  • C23 standard (ISO/IEC 9899:2024):
  • 7.21.7.2 The fgets function (p: TBD)
  • C17 standard (ISO/IEC 9899:2018):
  • 7.21.7.2 The fgets function (p: 241)
  • C11 standard (ISO/IEC 9899:2011):
  • 7.21.7.2 The fgets function (p: 331)
  • C99 standard (ISO/IEC 9899:1999):
  • 7.19.7.2 The fgets function (p: 296)
  • C89/C90 standard (ISO/IEC 9899:1990):
  • 4.9.7.2 The fgets function

[edit] See also

reads formatted input from stdin , a file stream or a buffer
(function) [edit]
(removed in C11)(C11)
reads a character string from stdin
(function) [edit]
writes a character string to a file stream
(function) [edit]
read from a stream into an automatically resized buffer until delimiter/end of line
(function) [edit]
Retrieved from "https://en.cppreference.com/mwiki/index.php?title=c/io/fgets&oldid=172125"

AltStyle によって変換されたページ (->オリジナル) /