Как я могу получить размер буфера наддува - PullRequest
2 голосов
/ 06 июня 2010

Я пытаюсь сделать асинхронный сервер в 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 ]

2 голосов
/ 06 июня 2010

boost::array имеет постоянный размер. Если вы хотите напечатать ее как строку с нулевым символом в конце, используйте .data(), чтобы получить const char*.

Если вы просто хотите найти позицию \0, , используйте std::find.

int size = find(array.begin(), array.end(), '\0') - array.begin();
0 голосов
/ 06 июня 2010

Если вы указали размер буфера равным 256, а затем поместите символ в местоположение 0 в буфере и попытаетесь cout в буфере, он напечатает весь буфер. Это потому, что программа не может знать, что вы поместили в буфер только один «действительный» символ. Вам нужно будет хранить отдельный «указатель» в буфере, который позволит вам знать, где заканчиваются ваши данные и начинается «пустая» часть буфера.

0 голосов
/ 06 июня 2010

boost :: массивы имеют постоянный размер на основе второго аргумента шаблона. Вы можете получить их размер, вызвав их метод size (). См. boost :: массив документации .

...