boost: read_until "\ n" читает до "" - PullRequest
       24

boost: read_until "\ n" читает до ""

4 голосов
/ 26 октября 2011

Я разрабатываю tcp-клиент, использующий boost :: asio для обработки входящего текста, который заканчивается на \ n.Однако когда я отправляю текст, содержащий пробелы, он удаляет все символы после появления первого пробела.Я уже подтвердил, что отправляемый текст завершен.

Это мой код:

boost::system::error_code error; 
boost::asio::streambuf buffer; 
boost::asio::read_until( *socket, buffer, "\n", error ); 
std::istream str(&buffer); 
std::string s; 
str >> s; 

Ответы [ 2 ]

11 голосов
/ 26 октября 2011

Используйте std::getline вместо >>, что останавливает чтение при обнаружении пробела:

std::istream str(&buffer); 
std::string s; 
std::getline(str, s);
3 голосов
/ 26 октября 2011
 std::istream str(&buffer); 
 std::string s; 
 str >> s; 

Если вы так проверяете содержимое буфера, то вы ошиблись.Это будет читать std::string из строки, которая читает до первого символа пробела.Вот что делает std::string operator<<.Если вы продолжите делать >> s, вы получите остальную информацию.Вместо этого вы можете использовать std::getline для получения всего содержимого.

...