std::fgetws
Материал из cppreference.com
<tbody>
</tbody>
| Определено в заголовочном файле <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()
{
// Создаёт временный файл, содержащий широкие символы
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 требует, чтобы была установлена errno
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
Смотрите также
| считывает ввод форматированных широких символов из stdin, файлового потока или буфера (функция) | |
| получает широкий символ из файлового потока (функция) | |
| записывает широкую строку в файловый поток (функция) | |
Документация C по fgetws
| |