После записи в поток строк, почему извлечение в строку делает эту строку фиктивной? - PullRequest
3 голосов
/ 30 сентября 2011

Я столкнулся с загадочной ошибкой, связанной со струнным потоком. У меня есть объект, свойства которого я хочу вывести в файл с помощью dumpState (). Этот объект имеет несколько объектов-членов, для каждого из которых был определен оператор <<. Вот код: </p>

void dumpState(int step){
  stringstream s;
  s << DUMP_PATH << step;
  string filename;
  //s >> filename;

  fstream f;
  f.open("fuuuuu.csv", fstream::out); 
  //f.open(filename.c_str(), fstream::out);  

  f << numNodes << '\n';
  f << nodes << '\n';
  f << numEdges << '\n';
  f << edges << '\n';
  f.close();
}

Мое намерение, конечно, написать файл, имя которого определяется пошагово. К сожалению, я считаю, что выводимые значения являются поддельными. Отследив ошибку, я обнаружил, что если я закомментирую "s >> filename;" значения верны.

Должна быть какая-то проблема с очисткой, но я не знаю, как ее исправить. Есть идеи по поводу этого довольно зловещего жука?

UPDATE:

Я думаю, что проблема была довольно сложной ошибкой из-за ошибки в другом месте моего кода. После реструктуризации моего кода исходный код, который я разместил, работает нормально.

Ответы [ 3 ]

2 голосов
/ 30 сентября 2011

Вы должны использовать ostringstream и вызвать s.str(), чтобы получить содержимое.

0 голосов
/ 01 октября 2011

Среди других возможных проблем, s >> filename; будет читать только до первого пробела.

У Фу Баха правильное решение.

0 голосов
/ 30 сентября 2011

Я не могу воспроизвести вашу проблему, используя g ++ 4.5.2 x86_64, поэтому я не могу подтвердить, что это проблема, но попробуйте следующее:

std::stringstream s;
s << DUMP_PATH << step;
s.flush();
std::string filename;
s >> filename;
...