gpt4 book ai didi

c++ - stringstream 的第一个字符串参数被保存为指针/垃圾

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:20:23 27 4
gpt4 key购买 nike

<分区>

Possible Duplicate:
Printing a string to a temporary stream object in C++
std::ostringstream printing the address of the c-string instead of its content

我正在尝试使用 stringstream 构建一个字符串,就像您使用 cout 一样。这类似于日志记录类。我遇到的问题是,如果 << 运算符的第一个参数是一个字符串,当我随后使用 stringstream::str() 调用打印出该字符串流时,我得到一个垃圾地址,而不是字符串。这只发生在第一个字符串上。随后的字符串很好。数字总是好的。这是代码:

    // class I use to print out the stream
class StreamWriter
{
public:
StreamWriter()
{}

~StreamWriter()
{
std::string myMessage = m_stringstream.str();
std::cout << myMessage << std::endl;
}

std::stringstream m_stringstream;
};

// macro for simplification
#define OSRDEBUG (StreamWriter().m_stringstream)

// actual use
OSRDEBUG << "Hello " << "my " << "name is Pris " << 123456;

// output
0x8054480my name is Pris 123456
0x8054480my name is Pris 123456
0x8054480my name is Pris 123456
0x8054480my name is Pris 123456

谁能阐明正在发生的事情,以及我该如何解决这个问题?

编辑:以下更改(除了 padiablo 的示例之外)也适用,保持类的析构函数与宏的使用。

    // class I use to print out the stream
class StreamWriter
{
public:
StreamWriter()
{ m_stringstream = new std::stringstream; }

~StreamWriter()
{
std::string myMessage = m_stringstream.str();
std::cout << myMessage << std::endl;
delete m_stringstream;
}

std::stringstream * m_stringstream;
};

// macro for simplication
#define OSRDEBUG *(StreamWriter().m_stringstream)

虽然最初的问题仍然存在,因为它看起来应该有效......而且我认为了解何时将其放入生产质量代码中可能很重要。

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com