如何获得增强缓冲区的大小

时间:2010-06-05 20:18:02

标签: c++ boost arrays buffer boost-asio

我正在尝试在visual studio中创建一个异步服务器,然后使用

boost::asio::async_read(m_socket, boost::asio::buffer(m_buffer), 
                        boost::bind(&tcp_connection::handle_read, shared_from_this(),
                                    boost::asio::placeholders::error));

将缓冲区放入m_buffer

boost::array<char, 256> m_buffer;

但是如何获得这个东西的大小,m_buffer?

size()没有用,end()没有用。任何帮助都会很棒。提前谢谢。

3 个答案:

答案 0 :(得分:2)

boost::array的大小不变。如果要将其打印为以null结尾的字符串,请使用.data() to get a const char*

如果您只是想找到\0use std::find

的位置
int size = find(array.begin(), array.end(), '\0') - array.begin();

答案 1 :(得分:0)

boost :: arrays具有基于第二个模板参数的常量大小。您可以通过调用size()方法来检索它们的大小。请参阅boost::array documentation

答案 2 :(得分:0)

如果您指定缓冲区的大小为256,然后在缓冲区中的位置0放置一个字符并尝试cout缓冲区,它将打印整个缓冲区。这是因为程序无法知道您在缓冲区中只放置了一个“有效”字符。您需要自己在缓冲区中保留一个单独的“指针”,以便您知道数据的结束位置以及缓冲区的“空”部分开始。