gpt4 book ai didi

c++ - Boost::Array 中的垃圾值与 Boost::Asio 一起使用

转载 作者:搜寻专家 更新时间:2023-10-30 23:55:31 24 4
gpt4 key购买 nike

客户是这样

    std::string line;
std::cin>>line;
boost::asio::write(socket, boost::asio::buffer(line));


服务器正在读取这样

void reader(){   
socket_.async_read_some(boost::asio::buffer(buf),
boost::bind(&tcp_connection::handle_read,shared_from_this()));
}
void handle_read()
{
std::cout.write(buf.data(),1024);
std::cout<<"\n";
}
tcp::socket socket_;
boost::array<char, 1024> buf;


现在当我从客户端写一行“hello how are you”时,它只是打印“hello”然后是垃圾值
这是服务器显示的输出:

helloA0�B��B�����a�Pa�!0�B�b����uB�`�#K|BP�b��D4B���Bb�Pa���e��e�����pc�!0�Be���xB�`�#KcBe�:7B�����e��e���  


我怎样才能删除这些垃圾值并从客户端获取完整的消息/行

最佳答案

  1. operator >>使用空格作为分隔符,如 scanf() .你应该使用 std::getline() .

    std::getline(std::cin, line);
  2. 为什么使用 cout.write() ?只需使用 operator << .

    std::cout << buf.data();

    当然要注意了'\0' -终止。可能 boost.asio 将接收到的字节大小提供给您的处理程序。

关于c++ - Boost::Array 中的垃圾值与 Boost::Asio 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31049503/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com