home | help
std::fgets(3)		       C++ Standard Libary		   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 posi-
     tion
	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 indi-
     cator (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 <cstdio>
      #include <cstdlib>
      #include <iomanip>
      #include <iostream>
      #include <span>

      void dump(std::span<const char> buf, std::size_t offset)
      {
	  std::cout << std::dec;
	  for (char ch : buf)
	      std::cout << (ch >= ' ' ? ch : '.'), offset--;
	  std::cout << std::string(offset, ' ') << std::hex
		    << std::setfill('0') << std::uppercase;
	  for (unsigned ch : buf)
	      std::cout << std::setw(2) << ch << ' ';
	  std::cout << std::dec << '\n';
      }

      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);
	  for (char buf[8]; std::fgets(buf, sizeof buf, tmpf) != nullptr;)
	      dump(buf, 10);
      }

Output:
      Alan Tu.	41 6C 61 6E 20 54 75 00
      ring..u.	72 69 6E 67 0A 00 75 00
      John vo.	4A 6F 68 6E 20 76 6F 00
      n Neuma.	6E 20 4E 65 75 6D 61 00
      nn..uma.	6E 6E 0A 00 75 6D 61 00
      Alonzo .	41 6C 6F 6E 7A 6F 20 00
      Church..	43 68 75 72 63 68 0A 00

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)
	C documentation for
	fgets

http://cppreference.com 	   2024.06.10			   std::fgets(3)

home | help