Если вы хотите создать из него поток istring, символ * с нулевым символом или все элементы из std :: string:
istringstream str(ptr); // char*
istringstream str(other_str); // std::string
Если вы говорите о желании получить необработанный указатель в буфер istream, вы не сможете этого сделать. Потоки получают свои данные по требованию, если они им нужны, либо из файлов, терминалов или еще, по желанию буферизуя их содержимое (ну, не совсем верно. Вы можете использовать strstream
, который принимает необработанный указатель и читает / пишет непосредственно из этого Но это устаревший класс - не используйте его. Мне повезло, я никогда этого не делал). Если все, что вам нужно, это то, что вы можете использовать как указатель, вы можете использовать итераторы streambuf. Хотя они на самом деле не являются указателями, поэтому вы не можете вычесть end
из begin
и другие материалы:
std::istreambuf_iterator<char> begin(one_istream), end;
while(begin != end)
std::cout << *begin++;
Если вы говорите о получении строки из того, что было записано в поток строк, вы можете использовать ostringstream::str
:
ostringstream o;
o << "This is a number: " << 42;
std::string str = o.str(); // str == "This is a number: 42"
В противном случае, вы можете читать только материал из istream
. Вам нужно ostream
, тогда вы можете сделать
stream.write(ptr, N);
stream.write(ptr.c_str(), ptr.c_str() + ptr.size());
для записи ровно N символов из байтов, на которые указывает str. Вы также можете записать его в поток, используя <<
. Он будет записывать все до нулевого символа или все из std :: string, но будет учитывать флаги форматирования, такие как ширина поля:
stream << ptr; // char*
stream << other_str; // everything from std::string