std::fgetws
来自cppreference.com
在标头 <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、文件流或缓冲区读取有格式宽字符输入 (函数) | |
从文件流获取宽字符 (函数) | |
写宽字符串到文件流 (函数) |