g ++ 4.6 ошибка с потоком строк? - PullRequest
0 голосов
/ 08 декабря 2011

В прошлом я использовал 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. У меня такие же результаты, используя iostream со связанным stringbuf, что в основном и делает stringstream.

1 Ответ

0 голосов
/ 09 декабря 2011

Я перечитал спецификации и, наконец, решил использовать этот фрагмент кода для получения доступных байтов в потоке stringstream: pipe.tellp()-pipe.tellg(). Насколько я знаю, он совместим со всем, и поэтому он всегда работает.

...