如何通过标准字符串打印 ostream 变量的值?



我试图通过转换为字符串来打印 ostream 变量中存在的值,然后打印字符串而不是 ostream 参数。
但它不起作用。

这是我的代码:

#include <iostream>
#include <cassert>
#include <cstring>
#include <sstream>
using std::ostream;
typedef std::basic_stringstream<char> stringstream;
class X {
public:
int y;
};
std::ostream& operator<<(std::ostream& os, const X x) {
return os << x.y;
}
int main() {
X x;
x.y = 5;
stringstream ss;
ostream output(nullptr);
output << x;
ss << output.rdbuf();
std::string myString = ss.str();
std::cout << x << std::endl; // 5
std::cout << "myString.c_str() :" << std::endl;
std::cout << myString.c_str() << std::endl; // nothing.
}

如何解决此问题,以便myString.c_str()适当的输出?

std::cout << myString.c_str() << std::endl;行中的输出是"(空字符串 - 什么都没有(,我希望它也会被5(即char*类型的output

(。

从 http://www.cplusplus.com/reference/fstream/ofstream/rdbuf/

std::ofstream::rdbuf

返回指向内部 filebuf 对象的指针。

但请注意,这不一定与当前 关联的流缓冲区(由 iOS::RDBUF 返回(。

当你构造一个ostream对象时,你应该指定缓冲区,即输出的位置。您可以按如下方式构造output

std::stringbuf buf; 
std::ostream output(&buf);

无论如何,正如 Carl 在评论中建议的那样,您不需要中间对象output,只需执行

ss << x;

最新更新