std::strstreambuf::overflow
From cppreference.com
 
 
 < cpp | io | strstreambuf 
 
 
 C++ 
 Feature test macros (C++20)
 Concepts library (C++20)
 Metaprogramming library (C++11)
 Ranges library (C++20)
 Filesystem library (C++17)
 Concurrency support library (C++11)
 Execution control library (C++26)
Input/output library 
 
 
 
 
 
 
 
 
 
 
 
 
 Print functions (C++23)
 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)
std::strstreambuf 
 
 Public member functions
 Protected member functions
strstreambuf::overflow
Appends the character c to the put area of the buffer, reallocating if possible.
1) If c == EOF , does nothing.
2) Otherwise, if the put area has a write position available (pptr() < epptr()), stores the character as if by *pptr()++ = c.
3) Otherwise, if the stream buffer mode is not dynamic or the stream buffer is currently frozen, the function fails and returns EOF .
4) Otherwise, the function reallocates (or initially allocates) a dynamic array large enough to hold the contents of the current dynamic array (if any) plus at least one additional write position. If a pointer to the allocating function 
palloc was used in the constructor, that function is called with (*palloc)(n) where n is the number of bytes to allocate, otherwise new char[n] is used. If a pointer to the deallocating function pfree was used in the constructor, that function is called with (*pfree)(p) to deallocate the previous array, if needed, otherwise delete[] p is used. If allocation fails, the function fails and returns EOF . Contents
[edit] Parameters
 c
 -
 the character to store in the put area
[edit] Return value
If c == EOF , returns some value other than EOF . Otherwise, returns (unsigned char)(c) on success, EOF on failure.
[edit] Example
Run this code
#include <iostream> #include <strstream> struct mybuf : std::strstreambuf { int_type overflow(int_type c) { std::cout << "Before overflow(): size of the put area is " << epptr()-pbase() << " with " << epptr()-pptr() << " write positions available\n"; int_type rc = std::strstreambuf::overflow(c); std::cout << "After overflow(): size of the put area is " << epptr()-pbase() << " with " << epptr()-pptr() << " write positions available\n"; return rc; } }; int main() { mybuf sbuf; // read-write dynamic strstreambuf std::iostream stream(&sbuf); stream << "Sufficiently long string to overflow the initial allocation, at least " << " on some systems."; }
Possible output:
Before overflow(): size of the put area is 16 with 0 write positions available After overflow(): size of the put area is 32 with 15 write positions available Before overflow(): size of the put area is 32 with 0 write positions available After overflow(): size of the put area is 64 with 31 write positions available Before overflow(): size of the put area is 64 with 0 write positions available After overflow(): size of the put area is 128 with 63 write positions available
[edit] See also
[virtual]
(virtual protected member function of
std::basic_streambuf<CharT,Traits>) [edit] 
[virtual]
(virtual protected member function of
std::basic_stringbuf<CharT,Traits,Allocator>) [edit] 
[virtual]
(virtual protected member function of
std::basic_filebuf<CharT,Traits>) [edit] 
 
 writes one character to the put area and advances the next pointer 
(public member function of
(public member function of
std::basic_streambuf<CharT,Traits>) [edit]