gpt4 book ai didi

c++ - 将 streambuf 的内容复制到字符串

转载 作者:IT老高 更新时间:2023-10-28 12:39:55 29 4
gpt4 key购买 nike

显然 boost::asio::async_read 不喜欢字符串,因为 boost::asio::buffer 的唯一重载允许我创建 const_buffers,所以我坚持将所有内容读入流缓冲区。
现在我想将 streambuf 的内容复制到一个字符串中,但它显然只支持写入 char* (sgetn()),使用 streambuf 创建一个 istream 并使用 getline()

有没有其他方法可以在不过度复制的情况下创建带有streambufs内容的字符串?

最佳答案

不知道算不算“过度复制”,不过可以用stringstream:

std::ostringstream ss;
ss << someStreamBuf;
std::string s = ss.str();

例如,要将 stdin 中的所有内容读入字符串,请这样做

std::ostringstream ss;
ss << std::cin.rdbuf();
std::string s = ss.str();

或者,您也可以使用 istreambuf_iterator。您将不得不衡量这种方式或上述方式是否更快 - 我不知道。

std::string s((istreambuf_iterator<char>(someStreamBuf)), 
istreambuf_iterator<char>());

请注意,上面的 someStreamBuf 是为了表示一个 streambuf*,因此请取其适当的地址。另请注意最后一个示例中第一个参数周围的附加括号,以便它不会将其解释为返回字符串并采用迭代器和另一个函数指针的函数声明(“最令人烦恼的解析”)。

关于c++ - 将 streambuf 的内容复制到字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/877652/

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