Spec-Zone.ru › C++

std::strstreambuf::setbuf

protected:
virtual streambuf* setbuf( char* s, std::streamsize n );
(устарело в C++98)
(удалено в C++26)

Если s является нулевым указателем, а n равно нулю, эта функция не оказывает никакого эффекта.

В противном случае эффект определяется реализацией: некоторые реализации ничего не делают, тогда как другие освобождают динамический массив-член, используемый в качестве буфера, и начинают использовать предоставленный пользователем символьный массив размером n, первый элемент которого указывается s.

Эта функция является защищённой виртуальной функцией; её можно вызывать только через pubsetbuf() или из функций-членов пользовательского класса, производного от std::strstreambuf.

Параметры

s - указатель на первый байт предоставленного пользователем буфера
n - количество байтов в предоставленном пользователем буфере

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

this

Пример

Тест реализации для проверки поддержки setbuf() в динамическом strstream (вывод получен с помощью Sun Studio):

#include <iostream>
#include <strstream>

int main()
{
    char a[100] = {};
    std::strstream str;
    str.rdbuf()->pubsetbuf(a, sizeof a);
    str << "Test string" << std::ends;
    std::cout << "user-provided buffer holds \"" << a << "\"\n";
}

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

user-provided buffer holds "Test string"

Отчёты об ошибках

Следующие отчёты об ошибках, изменяющие поведение, были применены задним числом к ранее опубликованным стандартам C++.

Отчёт об ошибке Применяется к Опубликованное поведение Правильное поведение
LWG 66 C++98 эффект setbuf() был сформулирован как «выполняет операцию,
определяемую отдельно для каждого класса, производного от strstreambuf»,
однако классов, производных от strstreambuf, не существует
эффект определяется
реализацией

См. также

pubsetbuf
вызывает setbuf()
(открытая функция-член std::basic_streambuf<CharT,Traits>)
setbuf
[виртуальная]
заменяет буфер пользовательским массивом, если это разрешено
(виртуальная защищённая функция-член std::basic_streambuf<CharT,Traits>)
setbuf
[виртуальная]
пытается заменить управляемую последовательность символов массивом
(виртуальная защищённая функция-член std::basic_stringbuf<CharT,Traits,Allocator>)
setbuf
[виртуальная]
предоставляет пользовательский буфер или отключает буферизацию для этого filebuf
(виртуальная защищённая функция-член std::basic_filebuf<CharT,Traits>)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/io/strstreambuf/setbuf

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API