| I/O manipulators | ||||
| Print functions(C++23) | ||||
| C-style I/O | ||||
| Buffers | ||||
(C++23) | ||||
(C++98/26*) | ||||
(C++20) | ||||
| Streams | ||||
| Abstractions | ||||
| File I/O | ||||
| String I/O | ||||
| Array I/O | ||||
(C++23) | ||||
(C++23) | ||||
(C++23) | ||||
(C++98/26*) | ||||
(C++98/26*) | ||||
(C++98/26*) | ||||
| Synchronized Output | ||||
(C++20) | ||||
| Types | ||||
| Error category interface | ||||
(C++11) | ||||
(C++11) |
| Public member functions | ||||
| Protected member functions | ||||
strstreambuf::setbuf | ||||
protected: virtual streambuf* setbuf(char* s,std::streamsize n); | (deprecated in C++98) (removed in C++26) | |
Ifs is a null pointer andn is zero, this function has no effect.
Otherwise, the effect is implementation-defined: some implementations do nothing, while some implementations deallocate the dynamic member array used as the buffer and begin using the user-supplied character array of sizen, whose first element is pointed to bys.
This function is protected virtual, it may only be called throughpubsetbuf() or from member functions of a user-defined class derived fromstd::strstreambuf.
Contents |
| s | - | pointer to the first byte in the user-provided buffer |
| n | - | the number of bytes in the user-provided buffer |
this
Implementation test to check ifsetbuf() is supported on a dynamic strstream (output obtained with 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";}
Possible output:
user-provided buffer holds "Test string"
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| LWG 66 | C++98 | the effect ofsetbuf() was "performs an operation that isdefined separately for each class derived from strstreambuf",but there are no classes derived from strstreambuf | the effect is implementation-defined |
| invokessetbuf() (public member function of std::basic_streambuf<CharT,Traits>)[edit] | |
[virtual] | replaces the buffer with user-defined array, if permitted (virtual protected member function of std::basic_streambuf<CharT,Traits>)[edit] |
[virtual] | attempts to replace the controlled character sequence with an array (virtual protected member function of std::basic_stringbuf<CharT,Traits,Allocator>)[edit] |
[virtual] | provides user-supplied buffer or turns this filebuf unbuffered (virtual protected member function of std::basic_filebuf<CharT,Traits>)[edit] |