std::strstreambuf::str
char* str(); | (устарело в C++98) (удалено в C++26) |
Вызывает freeze(), а затем возвращает копию указателя на начало области чтения, std::streambuf::eback().
Начало области чтения для всех записываемых объектов std::strstreambuf, созданных через интерфейс, предоставляемый std::strstream, также является началом области записи.
Параметры
(нет)
Возвращаемое значение
Копию eback(), которая может быть нулевым указателем.
Примечания
Эту функцию обычно вызывают через интерфейс std::strstream.
Вызов freeze() гарантирует, что возвращённый указатель останется действительным до следующего явного вызова freeze(false): в противном случае (для динамического буфера) любая операция вывода может вызвать перераспределение буфера, что сделает указатель недействительным. Кроме того, это приводит к утечке памяти в деструкторе std::strstreambuf, если до уничтожения буфера (или, что бывает чаще, объекта std::strstream, который им управляет) не будет вызван freeze(false).
Пример
#include <iostream>
#include <strstream>
int main()
{
std::strstream dyn; // dynamically-allocated read/write buffer
dyn << "Test: " << 1.23 << std::ends;
std::strstreambuf* buf = dyn.rdbuf();
std::cout << "R/W buffer holds [" << buf->str() // or dyn.str()
<< "]\n";
dyn.freeze(false); // after calling .str() on a dynamic strstream
char arr[10];
std::ostrstream user(arr, 10); // fixed-size write-only buffer
buf = user.rdbuf();
user << 1.23 << std::ends;
std::cout << "Write-only buffer holds [" << buf->str() // or user.str()
<< "]\n";
std::istrstream lit("1 2 3"); // fixed-size read-only buffer
buf = lit.rdbuf();
std::cout << "Read-only buffer holds [" << buf->str() // or lit.str()
<< "]\n";
}
Вывод:
R/W buffer holds [Test: 1.23] Write-only buffer holds [1.23] Read-only buffer holds [1 2 31 2 3]
См. также
| получает доступ к буферу вывода (открытая функция-член std::strstream) |
|
| получает доступ к буферу вывода (открытая функция-член std::ostrstream) |
|
| получает доступ к буферу вывода (открытая функция-член std::istrstream) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/io/strstreambuf/str