Как вывести значение переменной ostream с помощью stdstring? - PullRequest
0 голосов
/ 10 июня 2018

Я попытался напечатать значение, существующее в переменной 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 голосов
/ 10 июня 2018

Когда вы создаете объект ostream, вы должны указать буфер, то есть, куда выводить.Вы можете построить output следующим образом:

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

В любом случае, поскольку Carl , предложенный в комментарии , вам не нужен промежуточный объект outputи просто сделай

ss << x;
0 голосов
/ 10 июня 2018

Выдано из http://www.cplusplus.com/reference/fstream/ofstream/rdbuf/

std :: ofstream :: rdbuf

Возвращает указатель на внутренний объект filebuf. * ​​1009 * Однако обратите вниманието, что это не обязательно совпадает с текущим связанным потоковым буфером (возвращаемым ios :: rdbuf).

...