boost:read_until“\ n”读到“”

时间:2011-10-26 16:45:07

标签: c++ boost-asio iostream

我正在使用boost :: asio开发一个tcp客户端来处理传入的文本,以“\ 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 个答案:

答案 0 :(得分:11)

使用std::getline代替>>,这是在遇到空白时停止阅读的内容:

std::istream str(&buffer); 
std::string s; 
std::getline(str, s);

答案 1 :(得分:3)

 std::istream str(&buffer); 
 std::string s; 
 str >> s; 

如果这是检查缓冲区内容的方式,那么你就错了。这将从字符串中读取std::string,该字符串读取第一个空格字符。这就是std::string operator<<的作用。如果您继续>> s,您将获得其他信息。相反,您可以使用std::getline来检索整个内容。