wstring_buffer没有输出

时间:2018-02-08 08:16:20

标签: c++

以下程序最初来自Josuttis'书" C ++标准库",第二版,第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!

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

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

1 个答案:

答案 0 :(得分:1)

我在Ubuntu上做了这个工作。 我必须在main

之后的最开始添加这一行
std::cin.sync_with_stdio(false);

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

用以下内容刷新输出流:

utf16out << flush;
最后,在while循环之后