std::strstream::str(3)

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

okay so bestie, welcome to std::strstream::str(3) β€” straight from the C++ Standard Libary manual, section 3. this page is short but it has lore πŸ’…

πŸ’– NAME πŸ’–

std::strstream::str β€” yep, that’s the name, and it’s literally std::strstream::str again. no plot twist. πŸŽ€

✨ Synopsis ✨

char* str();  (deprecated in C++98)
              (removed in C++26)

It returns the pointer to the beginning of the buffer, after freezing it. Effectively, it calls rdbuf()->str().

heads up: deprecated in C++98 and removed in C++26, so this is vintage behavior, bestie. πŸ’€

🌸 Parameters 🌸

(none) β€” no arguments, no params, nothing to pass. 🫢

πŸ¦‹ Return value πŸ¦‹

Pointer to the beginning of the buffer in the associated std::strstreambuf, or a null pointer if no buffer is available. That’s the whole return vibe. ✨

πŸŽ€ Notes πŸŽ€

  • Before a call to str() that uses the result as a C-string, the stream buffer must be null-terminated. like, actually terminated.
  • Regular output such as with stream << 1.2 does not store a null terminator. It must be appended explicitly, typically with the manipulator std::ends.
  • After a call to str(), dynamic streams become frozen. 🧊
  • A call to freeze(false) is required before exiting the scope in which this strstream object was created. Otherwise the destructor will leak memory. no cap, that’s a leak.
  • Also, additional output to a frozen stream may be truncated once it reaches the end of the allocated buffer, which may leave the buffer not null-terminated. so watch out for that.

πŸ§ͺ Example πŸ§ͺ

// Run this code β€” here’s the whole flex:

#include <iostream>
#include <strstream>

int main()
{
    std::strstream dyn; // dynamically-allocated output buffer
    dyn << "Test: " << 1.23; // not adding std::ends to demonstrate append behavior
    std::cout << "The output stream holds \"";
    std::cout.write(dyn.str(), dyn.pcount()) << "\"\n";
    // the stream is now frozen due to str()
    dyn << " More text" << std::ends;
    std::cout << "The output stream holds \"";
    std::cout.write(dyn.str(), dyn.pcount()) << "\"\n";
    dyn.freeze(false);
}

🌈 Possible output: 🌈

The stream holds "Test: 1.23"
The stream holds "Test: 1.23 More "

πŸ‘€ See also πŸ‘€

  • str β€” marks the buffer frozen and returns the beginning pointer of the input sequence (public member function of std::strstreambuf). πŸ’œ

okay that’s the page, bestie. source: http://cppreference.com; date on this one: 2024.06.10. periodt πŸ’–βœ¨

πŸ“¦ where this page comes from