使用 .data() 将字符数组转换为 std::string 不会转换整个数组
Using .data() to turn a character array to a std::string doesn't convert the entire array
我声明了一个大字符数组,然后我随后从套接字读取以填充它。
boost::array<char, 32841> buf{}
size_t len = boost::asio::read(socket, aio::buffer(buf, 32841));
如果我打印出len
我正确地得到 32841,当我单独遍历数组中的所有字符时,如下所示,
for (char i : buf) {
std::cout << i << std::endl;
}
我得到每个字符的输出。但是,当我尝试打印出缓冲区的字符串形式(通过buf.data()
(时,事情并没有像我希望的那样工作。我不会把所有的字符都打印出来——只有大约20个字符打印出来。
我正在将一堆加密的垃圾(例如,�Q{��=� �o$9�ZC �kL
(读入缓冲区,这意味着有可能获得编码各种时髦字符(如空字节、新行等(的字符。.data()
是否停止空字节或其他一些奇怪字符的字符串转换?
boost::array<char, N>::data()
(和std::array<char, N>::data()
(返回一个const char*
。将此指针传递给std::cout <<
将假定一个以 null 结尾的字符串,因此输出将在遇到的第一个