c++ peek()和tellg()一起使用的bug

cout<<"1-"<<Receive.tellg()<<endl;

cout<<"2-"<<char(Receive.peek())<<endl;

cout<<"3-"<<Receive.tellg()<<endl;

cout<<"4-"<<char(Receive.peek())<<endl;

cout<<"5-"<<Receive.tellg()<<endl;

cout<<"6-"<<char(Receive.peek())<<endl;

cout<<"7-"<<Receive.tellg()<<endl<<endl;

图片说明

程序的其他部分与问题无关,大概是从尾到头读一个txt文件里的所有字符,我在debug的时候发现了这个现象:
1. 第一个tellg返回的指针位置是正确的,但是如果后面跟着一个peek,再用tellg返回指针位置就会+1了。peek按理来说不会移动文件指针,但后面再重复几次又不会每次都+1。
2. 貌似是跟windows系统换行符有关,如果txt文件里没有换行符的话就没有这个问题。

我google了一下,发现国外很多论坛有人提相同的问题,有人解答说peek+tellg是c++的一个经典bug,不过也没有找到清楚的解答,求大神指点!

查看全部
zhongzhaoqun
zhongzhaoqun
2015/08/12 02:46
  • 文件i/o
  • c++
  • 点赞
  • 收藏
  • 回答
    私信

2个回复