g ++ 4.6 stringstream的错误?

时间:2011-12-08 12:04:52

标签: gcc g++ iostream stringstream

我过去曾在一个线程中使用stringstream作为管道(使用g ++ 4.5),没有任何问题。现在我尝试了相同的方法,但我无法在g ++ 4.6中使用它:问题是内部streambuf永远不会填充超出第一个字节。

考虑这段代码

#include <iostream>
#include <sstream>
using namespace std;

int main(){
        stringstream pipe(ios_base::in|ios_base::out|ios_base::binary);
        const char* in="lol";
        pipe.write(in, 4);
        char out[4]={0};
        cout<<pipe.readsome(out, 4)<<" "<<out<<endl;
}

这打印出意外的“1升”。

我在使用stringstream时是否有明显错误?否则,我必须得出结论,g ++ 4.6 STL存在一些缺陷。

P.S。 我使用带有相关stringbuf的iostream有相同的结果,这基本上就是stringstream的作用。

1 个答案:

答案 0 :(得分:0)

我重新阅读了规范,最后我决定使用这段代码来检索stringstream管道中的可用字节:pipe.tellp()-pipe.tellg()。 据我所知,它符合所有要求,所以它始终有效。