按块输出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, 0, 5);
while (buf.read(sendbuf, 5))
{
std::wcout << sendbuf;
wmemset(sendbuf, 0, 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, 0, 6);
while (buf.read(sendbuf, 5))
{
std::wcout << sendbuf;
wmemset(sendbuf, 0, 6);
}
return 0;
}

您在buf中读取的wchar_t比应该读取的多,从而破坏了您在那里对wmemset(sendbuf, 0, 5);进行的零终止
如果更改循环中的读取量

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

它按预期工作。

观看现场演示。

相关内容

  • 没有找到相关文章

最新更新