首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过stdstring打印ostream变量的值?

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

Stack Overflow用户
提问于 2018-06-10 18:49:59
回答 2查看 1K关注 0票数 1

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

但它不起作用。

这是我的代码:

代码语言:javascript
复制
#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;行的输出是"“(空字符串- nothing),我希望它也是5 (即char*类型的output )..

EN

回答 2

Stack Overflow用户

发布于 2018-06-10 19:10:47

引用自http://www.cplusplus.com/reference/fstream/ofstream/rdbuf/

std::ofstream::rdbuf

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

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

票数 0
EN

Stack Overflow用户

发布于 2018-06-10 23:11:38

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

代码语言:javascript
复制
std::stringbuf buf; 
std::ostream output(&buf);

无论如何,正如Carlcomment中建议的那样,您不需要中间对象output,只需要

代码语言:javascript
复制
ss << x;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50782912

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档