名前空間
変種
操作

std::fgetws

From cppreference.com
< cpp‎ | io‎ | c
 
 
 
C形式I/O
型とオブジェクト
関数
ファイルアクセス
直接入出力
非書式化入出力
書式付き入力
(C++11)(C++11)(C++11)    
(C++11)(C++11)(C++11)    
書式付き出力
ファイルポジショニング
エラーハンドリング
ファイル操作
 
ヘッダ <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

[編集] 関連項目

stdin、ファイルストリーム、またはバッファから書式付きワイド文字入力を読み込む
(関数) [編集]
ファイルストリームから1ワイド文字を取得する
(関数) [編集]
ファイルストリームにワイド文字列を書き込む
(関数) [編集]
English 日本語 中文(简体) 中文(繁體)