问题描述
我在读取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。