如何解决按块输出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_t
比buf
读的多,因此破坏了您在wmemset(sendbuf,5);
处所做的零终止。
如果您在循环中更改读取量
while (buf.read(sendbuf,4))
// ^ change
它按预期工作。
请参见live demo。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。