微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

按块输出wstringstream问题

如何解决按块输出wstringstream问题

我在读取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,5);

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

但是它不能打印出全部数据,为什么?

解决方法

std::wostream::operator<<采用一个wchar_t*参数,因此它不知道缓冲区的长度。您的缓冲区中需要额外的空间来终止零。

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

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

您所读的wchar_tbuf读的多,因此破坏了您在wmemset(sendbuf,5);处所做的零终止。
如果您在循环中更改读取量

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

它按预期工作。

请参见live demo

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。