按块问题输出 wstringstream
Output wstringstream by blocks issue
我在读取 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;
}
但它没有打印出全部数据,为什么?
您阅读的 wchar_t
多于 buf
的内容,因此破坏了您在 wmemset(sendbuf, 0, 5);
中所做的零终止。
如果在循环中改变读取量
while (buf.read(sendbuf, 4))
// ^ change
它按预期工作。
std::wostream::operator<<
需要一个wchar_t*
参数,所以它不知道你的缓冲区的长度。您的缓冲区中需要一个额外的 space 作为终止零。
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;
}
我在读取 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;
}
但它没有打印出全部数据,为什么?
您阅读的 wchar_t
多于 buf
的内容,因此破坏了您在 wmemset(sendbuf, 0, 5);
中所做的零终止。
如果在循环中改变读取量
while (buf.read(sendbuf, 4))
// ^ change
它按预期工作。
std::wostream::operator<<
需要一个wchar_t*
参数,所以它不知道你的缓冲区的长度。您的缓冲区中需要一个额外的 space 作为终止零。
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;
}