Namespaces
Variants

std::strstreambuf:: setbuf

From cppreference.net
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++.

DR Применяется к Поведение в опубликованной версии Корректное поведение
LWG 66 C++98 эффект от setbuf() был "выполняет операцию,
которая определяется отдельно для каждого класса, производного от strstreambuf ",
но нет классов, производных от strstreambuf
эффект является
определяемым реализацией

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

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