Spec-Zone.ru › C++

std::fgetws

Определено в заголовке <cwchar>
wchar_t* fgetws( wchar_t* str, int count, std::FILE* stream );

Считывает не более count - 1 символов широкого типа из заданного потока файла и сохраняет их в str. Полученная строка широкого типа всегда завершается нулём. Парсинг останавливается, если достигнута концовка файла или встречен символ широкой новой строки, в этом случае str будет содержать этот символ широкой новой строки.

Параметры

str - строка широкого типа, в которую будут считываться символы
count - длина str
stream - поток файла для чтения данных

Возвращаемое значение

str при успехе, нулевой указатель при ошибке.

Пример

#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;
}

Возможный вывод:

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

См. также

wscanffwscanfswscanf
считывает отформатированный ввод широких символов из stdin, потока файла или буфера
(функция)
fgetwcgetwc
получает символ широкого типа из потока файла
(функция)
fputws
записывает строку широкого типа в поток файла
(функция)
C документация для fgetws

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/io/c/fgetws

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API