std::fgets(3)

NAME
std::fgets - std::fgets

Synopsis
   Defined in header <cstdio>
   char* fgets( char* str, int count, std::FILE* stream );
   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.

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

Return value
   str on success, null pointer on failure.
   If the end-of-file condition is encountered, sets the eof indicator on stream (see
   std::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
   std::ferror()) on stream. The contents of the array pointed to by str are
   indeterminate (it may not even be null-terminated).

Notes
   POSIX additionally requires that fgets sets errno if it encounters a failure other
   than the end-of-file condition.
   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

Example
// Run this code
 #include <iostream>
 #include <cstdio>
 #include <cstdlib>
 int main()
 {
     std::FILE* tmpf = std::tmpfile();
     std::fputs("Alan Turing\n", tmpf);
     std::fputs("John von Neumann\n", tmpf);
     std::fputs("Alonzo Church\n", tmpf);
     std::rewind(tmpf);
     char buf[8];
     while (std::fgets(buf, sizeof buf, tmpf) != nullptr) {
         std::cout << '"' << buf << '"' << '\n';
     }
 }

Output:
 "Alan Tu"
 "ring
 "
 "John vo"
 "n Neuma"
 "nn
 "
 "Alonzo "
 "Church
 "

See also
   scanf reads formatted input from stdin, a file stream or a buffer
   fscanf (function)
   sscanf
   gets reads a character string from stdin
   (deprecated in C++11) (function)
   (removed in C++14)
   fputs writes a character string to a file stream
                        (function)