按块问题输出 wstringstream

Output wstringstream by blocks issue

我在读取 wstringstream 数据时遇到一些问题。代码如下:

#include <iostream>
#include <sstream>

int main(int argc, char* argv[]) {
    std::wstringstream buf(L"dsadsadsad dsadsadsad sadsadsadsad sa dsadsadsads dasdsadsa");
    wchar_t sendbuf[5];
    wmemset(sendbuf, 0, 5);

    while (buf.read(sendbuf, 5))
    {
        std::wcout << sendbuf;
        wmemset(sendbuf, 0, 5);
    }
    return 0;
}

但它没有打印出全部数据,为什么?

您阅读的 wchar_t 多于 buf 的内容,因此破坏了您在 wmemset(sendbuf, 0, 5); 中所做的零终止。
如果在循环中改变读取量

    while (buf.read(sendbuf, 4))
                          // ^ change

它按预期工作。

live demo

std::wostream::operator<<需要一个wchar_t*参数,所以它不知道你的缓冲区的长度。您的缓冲区中需要一个额外的 space 作为终止零。

int main(int argc, char* argv[]) {
    std::wstringstream buf(L"dsadsadsad dsadsadsad sadsadsadsad sa dsadsadsads dasdsadsa");
    wchar_t sendbuf[6];
    wmemset(sendbuf, 0, 6);

    while (buf.read(sendbuf, 5))
    {
        std::wcout << sendbuf;
        wmemset(sendbuf, 0, 6);
    }
    return 0;
}