c ++在fstreams上取消安全是安全的

时间:2014-03-30 11:56:53

标签: c++ iostream fstream

假设input.txt是1字节的文本文件:

std::ifstream fin("input.txt", std::ios::in);
fin.get();              // 1st byte extracted
fin.get();              // try to extract 2nd byte
std::cout << fin.eof(); // eof is triggered
fin.unget();            // return back
std::cout << fin.eof(); // eof is now reset
fin.get();              // try to extract 2nd byte, eof assumed
std::cout << fin.eof(); // no eof is triggered

似乎unget()打破eof标志触发,它也会破坏文件指针。我做错了吗?

1 个答案:

答案 0 :(得分:3)

eof未设置,但good也未设置。流正在忽略操作,因为它处于故障模式。

我不记得在EOF之后unget应该做什么,但如果我使用unget允许重试,clear会重新失败。

http://ideone.com/JkDrwG

使用自己的缓冲区通常更好。背叛是一种黑客攻击。