std::fgetws(3)
✨ NAME ✨
okay so bestie, welcome to the std::fgetws(3) page from the C++ Standard Libary 💅 this is literally the manual for std::fgetws, and we're about to read wide characters out of a file stream together — it's giving file I/O main character energy ✨
std::fgetws - std::fgetws
🌸 Synopsis 🌸
Defined in header <cwchar>
wchar_t* fgetws( wchar_t* str, int count, std::FILE* stream );
So here's the vibe: it 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, no cap. 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 tocount— the length ofstrstream— 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<unsigned>(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"Tétraèdre" L"\n",
L"Cube" L"\n",
L"Octaèdre" L"\n",
L"Icosaèdre" L"\n",
L"Dodécaèdre" 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:
Tétraèdre... 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
Octaèdre.... 004F 0063 0074 0061 00E8 0064 0072 0065 000A 0000 0000
0000
Icosaèdre... 0049 0063 006F 0073 0061 00E8 0064 0072 0065 000A 0000
0000
Dodécaèdre.. 0044 006F 0064 00E9 0063 0061 00E8 0064 0072 0065 000A
0000
🦋 See also 🦋
wscanf— reads formatted wide character input fromstdin, a file stream or a bufferfwscanf(function)swscanffgetwc— gets a wide character from a file streamgetwc(function)fputws— writes a wide string to a file stream (function)- C documentation for
fgetws
source: http://cppreference.com · version/date: 2024.06.10 · page: std::fgetws(3) — byeee bestie, mwah 💋✨
📦 where this page comes from
- nixpkgs unstable: stdman 2024.07.05
- opensuse-leap 16.0: stdman 2024.07.05-bp160.1.9 · MIT
- 💖 girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms