bada C ++ std :: stringstream - PullRequest
       7

bada C ++ std :: stringstream

1 голос
/ 16 февраля 2012

Сбой при чтении потока строк.

json::Object objDocument = d();
std::stringstream stream;
json::Writer::Write(objDocument, stream);
json::Object objDocument2;
json::Reader::Read(objDocument2, stream); // <=== crash

или как это:

std::string *requestString = new std::string(data);
AppLog(requestString->c_str()); // <=== contains correct data
std::stringstream stream;
stream << *requestString;
const char *ddd = stream.str().c_str();
AppLog(ddd); // <==== contains random data

Как мне это решить?
У кого были идеи или такой же опыт?

Ответы [ 2 ]

2 голосов
/ 16 февраля 2012

Строка stream.str() - это временное значение, которое уничтожается сразу после его использования для получения c_str(), после которого указатель становится недействительным.

Если вы сохраните ссылку во временной папке, строка будет выглядеть так:

std::string ddd_str = stream.str();
const char *ddd = ddd_str.c_str();
// ddd_str is still in scope and so ddd is still valid...
1 голос
/ 16 февраля 2012

Первая проблема, вероятно, проблема поиска.После записи текущая позиция в stringstream находится в конце, но вы хотите прочитать с самого начала.

...