2011-09-30 2 views
3

stringstream과 관련된 수수께끼의 버그가 발생했습니다. dumpState()를 사용하여 파일에 덤프하려는 속성을 가진 객체가 있습니다. 이 객체에는 여러 개의 멤버 객체가 있으며 각 객체에는 연산자 < <이 정의되어 있습니다. 코드는 다음과 같습니다.stringstream에 쓰고 난 후에, 문자열을 추출하면 그 문자열이 가짜가되는 이유는 무엇입니까?

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;을 주석 처리하면" 값은 정확합니다.

일종의 플러시 (flushing) 문제가 있어야하지만 문제를 해결하는 방법을 모르겠습니다. 이 사악한 버그에 대한 아이디어가 있습니까?

UPDATE :

나는 때문에 다른 곳에서 내 코드에서 실수로 문제가 다소 복잡한 오류라고 생각. 내 코드를 구조 조정 한 후에 내가 게시 한 코드가 정상적으로 작동합니다.

+0

는 strstream.h가 strstream –

+0

@DougT에 대한 때문에 sstream 될 것이다. 실제로 이것은 andyInCambridge

+0

입니다. 이것은 정말 흥미 롭습니다. 이것은 정수를 읽었을 때 작동하지만 문자열이 실패하는 것 같습니다. –

답변

2

ostringstream을 사용하고 내용을 얻으려면 s.str()으로 전화해야합니다.

+0

그의 솔루션이 작동하지 않는 이유가 궁금합니다. –

+0

@DougT. 나는 양쪽 방향으로 stringstream을 사용하지 않는다. 나는 그것을 사용하여 문자열을 만들거나 고정 된 문자열을 구문 분석하는 데 사용하지만 결코 두 가지 방법을 사용하지 않습니다. –

+0

물론, 작동하지 않아야하는 이유는 무엇입니까? –

0

나는 g ++ 4.5.2 x86_64의를 사용하여 문제를 재현 할 수없는, 그래서이이 방법으로 문제가 있는지 확인하지만 시도 할 수 없습니다 다른 가능한 문제 중

std::stringstream s; 
s << DUMP_PATH << step; 
s.flush(); 
std::string filename; 
s >> filename; 
관련 문제