Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
std::fgetws(3)		      C++ Standard Libary		std::fgetws(3)

NAME
       std::fgetws - std::fgetws

Synopsis
	  Defined in header <cwchar>
	  wchar_t* fgetws( wchar_t* str, int count, std::FILE* stream );

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

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

Return value
	  str on success, a null pointer on an error.

Example
       // Run this code

	#include <array>
	#include <clocale>
	#include <cstdio>
	#include <cstdlib>
	#include <cwchar>
	#include <cwctype>
	#include <iomanip>
	#include <iostream>
	#include <span>
	#include <string>

	void dump(std::span<const wchar_t> sp, std::size_t width = 14)
	{
	    for	(wchar_t wc : sp)
		std::wcout << (std::iswprint(wc) ? wc :	L'.');
	    std::wcout << std::wstring(width > sp.size() ? width - sp.size() :
       1, L' ')
		       << std::hex << std::uppercase <<	std::setfill(L'0');
	    for	(wchar_t wc : sp)
		std::wcout  <<	 std::setw(sizeof   wc)	  <<   static_cast<un-
       signed>(wc) << '	';
	    std::wcout << '\n';
	}

	int main()
	{
	    // Create temp file	that contains wide characters
	    std::setlocale(LC_ALL, "en_US.utf8");
	    std::FILE* tmpf = std::tmpfile();

	    for	(const wchar_t*	text : {
		L"Ttradre"    L"\n",
		L"Cube"		L"\n",
		L"Octadre"     L"\n",
		L"Icosadre"    L"\n",
		L"Dodcadre"   L"\n"
		})
		if (int	rc = std::fputws(text, tmpf); rc == EOF)
		{
		    std::perror("fputws()");  //  POSIX	requires that errno is
       set
		    return EXIT_FAILURE;
		}

	    std::rewind(tmpf);

	    std::array<wchar_t,	12> buf;
	    while (std::fgetws(buf.data(), buf.size(), tmpf) !=	nullptr)
		dump(std::span(buf.data(), buf.size()));

	    return EXIT_SUCCESS;
	}

Possible output:
	Ttradre...  0054 00E9 0074 0072	0061 00E8 0064	0072  0065  000A  0000
       0000
	Cube..dre...   0043  0075 0062 0065 000A 0000 0064 0072	0065 000A 0000
       0000
	Octadre....  004F 0063 0074 0061 00E8 0064 0072	0065  000A  0000  0000
       0000
	Icosadre...   0049  0063  006F 0073 0061 00E8 0064 0072	0065 000A 0000
       0000
	Dodcadre..  0044 006F 0064 00E9	0063 0061 00E8	0064  0072  0065  000A
       0000

See also
	  wscanf   reads  formatted  wide  character  input from stdin,	a file
       stream or a buffer
	  fwscanf (function)
	  swscanf
	  fgetwc  gets a wide character	from a file stream
	  getwc	  (function)
	  fputws  writes a wide	string to a file stream
		  (function)
	  C documentation for
	  fgetws

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

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=std::fgetws&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>

home | help