Namespaces
Variants

std::ostrstream:: str

From cppreference.net

char * str ( ) ;
(устарело в C++98)
(удалено в C++26)

Возвращает указатель на начало буфера после его заморозки. Фактически вызывает rdbuf ( ) - > str ( ) .

Содержание

Параметры

(нет)

Возвращаемое значение

Указатель на начало буфера в связанном std:: strstreambuf или нулевой указатель, если буфер недоступен.

Примечания

Перед вызовом str() , который использует результат как C-строку, буфер потока должен быть нуль-терминирован. Обычный вывод, такой как stream << 1.2 , не сохраняет нуль-терминатор; его необходимо добавить явно, обычно с помощью манипулятора std::ends .

После вызова str() динамические потоки замораживаются. Перед выходом из области видимости, в которой был создан этот ostrstream объект, требуется вызов freeze(false) . В противном случае деструктор приведет к утечке памяти. Кроме того, дополнительный вывод в замороженный поток может быть обрезан при достижении конца выделенного буфера, что может оставить буфер не нуль-терминированным.

Пример

#include <iostream>
#include <strstream>
int main()
{
    std::ostrstream dyn; // динамически выделенный выходной буфер
    dyn << "Test: " << 1.23; // не добавляем std::ends для демонстрации поведения добавления
    std::cout << "The output stream holds \"";
    std::cout.write(dyn.str(), dyn.pcount()) << "\"\n"; 
    // поток теперь заморожен из-за вызова str()
    dyn << " More text" << std::ends;
    std::cout << "The output stream holds \"";
    std::cout.write(dyn.str(), dyn.pcount()) << "\"\n";
    dyn.freeze(false);
}

Возможный вывод:

The stream holds "Test: 1.23"
The stream holds "Test: 1.23 More "

Смотрите также

помечает буфер замороженным и возвращает указатель на начало входной последовательности
(публичная функция-член std::strstreambuf )