C++标准文件流文件尾符的处理原理

C++标准文件流通过eofbit判断文件结束,read()仅在实际读取不足时设置该标志。peek()函数在预读文件时若遇到文件结束符会设置eofbit。文件尾符-1是不可用字符,但只有当缓存可用字符数为0时,-1才是文件结束标志。理解文件尾符不在文件中,而存在于读缓冲区,并通过peek()的返回值区分正常数据和文件结束符。
摘要由CSDN通过智能技术生成

标准文件流中对文件结尾符处理的原理是: eof()判断流标识位的eofbit是否设置了,若是则返回-1,文件结束。

bool __CLR_OR_THIS_CALL eof() const
        {    // test if eofbit is set in stream state
        return ((int)rdstate() & (int)eofbit);
        }

这么看来,在每个对文件读取而导致文件指针移动的标准流函数中,如ifstream::read(),c++标准文件流系统应该负责检测文件读取缓存中可用字符是否已读完,即流指针是否已到文件结束符。然而,它却忘记了!看下面的代码:

    _Myt& __CLR_OR_THIS_CALL read(_Elem *_Str, streamsize _Count)
        {    // read up to _Count characters into buffer
        _DEBUG_POINTER(_Str);
        ios_base::iostate _State = ios_base::goodbit;
        _Chcount = 0;
        const sentry _Ok(*this, true);

        if (_Ok)
            {    // state okay, use facet to extract
            _TRY_IO_BEGIN
            const streamsize _Num = _Myios::rdbuf()->sgetn(_Str, _Count);
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值