protected: virtual streambuf* setbuf( char* s, std::streamsize n ); |
If s
is a null pointer and n
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 size n
, whose first element is pointed to by s
.
This function is protected virtual, it may only be called through pubsetbuf()
or from member functions of a user-defined class derived from std::strstreambuf
.
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 if setbuf()
is supported on a dynamic strstream (output obtained with Sun Studio):
#include <strstream> #include <iostream> 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 of setbuf() 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 |
invokes setbuf() (public member function of std::basic_streambuf<CharT,Traits> ) |
|
[virtual] | replaces the buffer with user-defined array, if permitted (virtual protected member function of std::basic_streambuf<CharT,Traits> ) |
[virtual] | attempts to replace the controlled character sequence with an array (virtual protected member function of std::basic_stringbuf<CharT,Traits,Allocator> ) |
[virtual] | provides user-supplied buffer or turns this filebuf unbuffered (virtual protected member function of std::basic_filebuf<CharT,Traits> ) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/io/strstreambuf/setbuf