std::ostrst...::ostrstream(3)

πŸ“¦ version 2024.07.05, in nixpkgs unstable, opensuse-leap 16.0

πŸ’– NAME πŸ’–

okay so this is the std::ostrst...::ostrstream(3) page from the C++ Standard Libary (yes that spelling, we're keeping it, no notes). The name is std::ostrstream::ostrstream β€” constructor with the same name as the class, main character energy fr fr.


✨ Synopsis ✨

ostrstream();  (1)
(deprecated in C++98)
(removed in C++26)

ostrstream( char* s, int n, std::ios_base::openmode mode = std::ios_base::out );  (2)
(deprecated in C++98)
(removed in C++26)

This constructs a new output strstream and its underlying std::strstreambuf. πŸ’…

1) Default-constructs the underlying std::strstreambuf, which creates a dynamically growing buffer, and initializes the base class with the address of the strstreambuf member. cute.

2) Initializes the base class with the address of the underlying std::strstreambuf member, which is initialized in one of the two possible ways β€” both of which write to a user-provided fixed-size array:

  • a) if the app bit is not set in mode, it constructs the buffer by calling strstreambuf(s, n, s). The behavior is undefined if there are less than n elements in the array whose first element is pointed to by s.
🚨 undefined behavior alert: less than n elements in that array? bestie no. That's the danger zone.
  • b) if the app bit is set in mode, it constructs the buffer by calling strstreambuf(s, n, s + std::strlen(s)). The behavior is undefined if there are less than n elements in the array whose first element is pointed to by s, or if the array does not contain a valid null-terminated character sequence.
😭 another undefined behavior warning: not enough elements OR no valid null-terminated character sequence in the array = nope, don't do it.

🌸 Parameters 🌸

  • s β€” char array to use as the output buffer.
  • n β€” size of the array to be used as the output buffer.
  • mode β€” specifies stream open mode. It is a bitmask type, and the following constants are defined (although only app is used):
    • app β€” seek to the end of stream before each write
    • binary β€” open in binary mode
    • in β€” open for reading
    • out β€” open for writing
    • trunc β€” discard the contents of the stream when opening
    • ate β€” seek to the end of stream immediately after open
    • noreplace (C++23) β€” open in exclusive mode

πŸŽ€ Example πŸŽ€

// Run this code

#include <iostream>
#include <strstream>

int main()
{
    std::ostrstream s1; // dynamic buffer
    s1 << 1 << ' ' << 3.14 << " example\n" << std::ends;
    std::cout << s1.str();
    s1.freeze(false);

    char arr[15] = "Hello";

    std::ostrstream s2(arr, sizeof arr, std::ios_base::app);
    s2 << ", world!" << std::ends;
    std::cout << s2.str() << '\n';
    std::cout << arr << '\n'; // streams use the provided arrays
}

🌈 Output 🌈

1 3.14 example
Hello, world!
Hello, world!

πŸ‘‘ See also πŸ‘‘

  • constructor β€” constructs a strstreambuf object (public member function of std::strstreambuf)
  • constructor β€” constructs an istrstream object, optionally allocating the buffer (public member function of std::istrstream)
  • constructor β€” constructs a strstream object, optionally allocating the buffer (public member function of std::strstream)

xoxo bestie πŸ’œ source: http://cppreference.com; version/date: 2024.06.10; page: std::ostrst...::ostrstream(3). slay.

πŸ“¦ where this page comes from