我试图通过转换为字符串来打印 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;