2011-09-30 101 views
3

我遇到了一个涉及stringstream的令人费解的bug。我有一个对象的属性,我想使用dumpState()转储到一个文件。该对象具有多个成员对象,每个成员对象都有为其定义的运算符< <。这里的代码:写入字符串流后,为什么解压缩为字符串会导致该字符串变为虚假?

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 >>文件名;”值是正确的。

必须有某种潮红问题正在进行,但我不知道如何解决它。关于这个看起来很邪恶的bug的任何想法?

UPDATE:

我认为这个问题是一个相当复杂的错误是由于我的代码的其他地方是错误的。重新构建我的代码后,我发布的原始代码工作正常。

+0

它必须是sstream因为strstream.h是strstream –

+0

@DougT。事实上,它是 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;