Это легко сделать с помощью библиотеки Boost.Iostreams:
#include <boost/iostreams/device/array.hpp>
#include <boost/iostreams/stream.hpp>
#include <iostream>
#include <string>
int main() {
std::string_view buf{"hello\n"};
boost::iostreams::stream<boost::iostreams::basic_array_source<char>> stream(buf.begin(), buf.size());
std::string s;
stream >> s;
std::cout << s << '\n';
}
Вы можете сделать это с помощью std::stringstream
и std::basic_stringbuf<CharT,Traits,Allocator>::setbuf
, но с C ++Стандарт нарушил свои требования:
Эффект [из setbuf
] определяется реализацией: некоторые реализации ничего не делают, в то время как некоторые реализации очищают член std::string
, используемый в настоящее время в качестве буфера, и начинают использоватьпредоставленный пользователем массив символов размером n
, первый элемент которого указан s
в качестве буфера и последовательности символов ввода / вывода.