我正在使用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;
答案 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
来检索整个内容。