如何通过stdstring打印ostream变量的值?

时间:2018-06-10 10:49:59

标签: c++ c++11 stringstream stdstring 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(即output类型char* }})..

2 个答案:

答案 0 :(得分:0)

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

退出

<强>的std :: ofstream的:: rdbuf

  

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

  但请注意,这不一定与当前相同   关联的流缓冲区(由ios :: rdbuf返回)。

答案 1 :(得分:0)

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

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

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

ss << x;