# std::strstreambuf::strstreambuf

From cppreference.com
< cpp‎ | io‎ | strstreambuf

| (1) |
explicit strstreambuf( std::streamsize alsize = 0 ); |  | (until C++11)
strstreambuf() : strstreambuf(0) {} explicit strstreambuf( std::streamsize alsize ); |  | (since C++11)
strstreambuf( void* (*palloc)(std::size_t), void (*pfree)(void*) ); | (2) |
strstreambuf( char* gnext, std::streamsize n, char* pbeg = 0 ); | (3) |
strstreambuf( signed char* gnext, std::streamsize n, signed char* pbeg = 0 ); | (4) |
strstreambuf( unsigned char* gnext, std::streamsize n, unsigned char* pbeg = 0 ); | (5) |
strstreambuf( const char* gnext, std::streamsize n ); | (6) |
strstreambuf( const signed char* gnext, std::streamsize n); | (7) |
strstreambuf( const unsigned char* gnext, std::streamsize n ); | (8) |

1) Constructs a `std::strstreambuf` object: initializes the base class by calling the default constructor of std::streambuf, initializes the buffer state to "dynamic" (the buffer will be allocated as needed), initializes allocated size to the provided `alsize`, initializes the allocation and the deallocation functions to null (will use new[] and delete[])
2) Constructs a `std::strstreambuf` object: initializes the base class by calling the default constructor of std::streambuf, initializes the buffer state to "dynamic" (the buffer will be allocated as needed), initializes allocated size to unspecified value, initializes the allocation function to `palloc` and the deallocation function to `pfree`
3-5) Constructs a `std::strstreambuf` object in following steps:
a) Initializes the base class by calling the default constructor of std::streambuf
b) Initializes the buffer state to "constant" (the buffer is a user-provided fixed-size buffer)
c) Determines the number of elements in the user-provided array as follows: if `n` is greater than zero, `n` is used. If `n` is zero, std::strlen(gnext) is executed to determine the buffer size. If `n` is negative, INT_MAX is used.
d) Configures the std::basic_streambuf pointers as follows: If `pbeg` is a null pointer, calls setg(gnext, gnext, gnext + N). If `pbeg` is not a null pointer, executes setg(gnext, gnext, pbeg) and setp(pbeg, pbeg+N), where N is the number of elements in the array as determined earlier.
6-8) Same as strstreambuf((char*)gnext, n), except the "constant" bit is set in the buffer state bitmask (output to this buffer is not allowed)

### Parameters

alsize | - | the initial size of the dynamically allocated buffer
palloc | - | pointer to user-provided allocation function
pfree | - | pointer to user-provided deallocation function
gnext | - | pointer to the start of the get area in the user-provided array
pbeg | - | pointer to the start of the put area in the user-provided array
n | - | the number of bytes in the get area (if pbeg is null) or in the put area (if pbeg is not null) of the user-provided array

### Notes

These constructors are typically called by the constructors of std::strstream

### Defect reports

The following behavior-changing defect reports were applied retroactively to previously published C++ standards.

DR | Applied to | Behavior as published | Correct behavior
--- | --- | --- | ---
P0935R0 | C++11 | default constructor was explicit | made implicit

### Example

Run this code

    #include <strstream>
    #include <iostream>

    int main()
    {
        std::strstreambuf dyn; // dynamic
        std::strstream dyn_s; // equivalent stream
        dyn_s << 1.23 << std::ends;
        std::cout << dyn_s.str() << '\n';
        dyn_s.freeze(false);

        char buf[10];
        std::strstreambuf user(buf, 10, buf); // user-provided output buffer
        std::ostrstream user_s(buf, 10); // equivalent stream
        user_s << 1.23 << std::ends;
        std::cout << buf << '\n';

        std::strstreambuf lit("1 2 3", 5); // constant
        std::istrstream lit_s("1 2 3"); // equivalent stream
        int i, j, k;
        lit_s >> i >> j >> k;
        std::cout << i << ' ' << j << ' ' << k << '\n';
    }

Output:

    1.23
    1.23
    1 2 3

### See also

(constructor) | constructs an strstream, optionally allocating the buffer (public member function of `std::strstream`)

Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/io/strstreambuf/strstreambuf&oldid=102777"