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