我在读取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
它按预期工作。
观看现场演示。