c++ - wstring_buffer 没有给出输出

标签 c++

以下程序最初来自 Josuttis 的书“The C++ Standard Library”,第 2 版,第 903 页。

http://coliru.stacked-crooked.com/a/cab87d0d7d9f8a7b

/**
    An input stream reads UTF-8 multibyte characters into wide characters.
    Then, an output stream writes these wide characters as UTF-16 
    multibyte characters with leading byte order marks.
*/

#include <string>
#include <iostream>             /// cout
#include <locale>               /// wbuffer_convert
#include <codecvt>              /// codecvt_utf8<T>>

using namespace std;


int main()
{
    // create input stream reading UTF-8 sequences:
    wbuffer_convert<codecvt_utf8<wchar_t>> 
             utf8inBuf(cin.rdbuf());
    wistream utf8in(&utf8inBuf);

    // create output stream writing UTF-16 sequences:
    wbuffer_convert<codecvt_utf16<wchar_t,
                                  0xFFFF,
                                  generate_header>>
                   utf16outBuf(cout.rdbuf());
    wostream utf16out(&utf16outBuf);

    // write each character read:
    wchar_t c;
    while (utf8in.get(c))
    {
        utf16out.put(c);
    }

    cout << "Completed!" << endl;
}

给定以下输入:

Hello, World!

程序不打印任何相应的输出。

为什么会这样?如何让程序运行?

最佳答案

我在 Ubuntu 上完成了这项工作。 我不得不在最开始添加这一行,就在 main 之后:

std::cin.sync_with_stdio(false);

否则 utf8inBuf 缓冲区未从 cin 中填充。

然后使用以下命令刷新输出流:

utf16out << flush;

在最后,在 while 循环之后。

关于c++ - wstring_buffer 没有给出输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48680648/

相关文章:

c++ - 将 gdi+ 位图复制到 directx 纹理中

C++ 传递指针引用

c++ - 基于范围的循环不适用于数组指针

c++ - 带/不带类的回调函数指针 C++

C++:在 switch 语句内构造数组

c++ - 如何判断va_list是否为空

c++ - 编译简单 Windows 二进制文件的最简单方法

c++ - 强制类模板特化以提供一种或多种方法

c++ - 从函数返回一个shared_ptr

c++ - 在 iOS 中使用 std::atomic