ストリームからすべてのデータを読み込んでも、最後まで読み込もうとしないと、ストリームのEOFは設定されません。これがC++ストリームの仕組みですよね?これは働く理由です。しかしstd :: ios_base :: ignore()がEOFビットを設定するのはなぜですか?
#include <sstream>
#include <cassert>
char buf[255];
int main()
{
std::stringstream ss("abcdef");
ss.read(buf, 6);
assert(!ss.eof());
assert(ss.tellg() == 6);
}
、代わりに私はそれをignore()
read()
INGのデータを、EOFが設定されている場合:
#include <sstream>
#include <cassert>
int main()
{
std::stringstream ss("abcdef");
ss.ignore(6);
assert(!ss.eof()); // <-- FAILS
assert(ss.tellg() == 6); // <-- FAILS
}
これはGCC 4.8とGCCトランク(Coliru)です。
tellg()
返信-1
(それはtellg()
のものです)、これは私がやっていることを迷惑にしています。
標準に準拠していますか?もしそうなら、どの通路と、なぜですか? ignore()
はなぜ私が言いましたより多くを読もうとしましたか?
cppreference's ignore()
pageでこの現象の原因が見つかりません。私はおそらく.seekg(6, std::ios::cur)
の代わりに、そうでしょうか?しかし、私はまだ何が起こっているのか知りたいです。
うわー、これはMSVS上で動作返さないされていません。それもcoliruのclangで失敗しました。私はそれがライブラリであり、コンパイラ自体ではないと思う。 – NathanOliver
'eof'以外の' delim'を指定するとどうなりますか? – dwcanillas
@dwcanillas:[変更なし](http://coliru.stacked-crooked.com/a/bdb33a4a1a87e593)。 –