gpt4 book ai didi

c++ - Visual Studio 中 EOF 之前的 EOF

转载 作者:行者123 更新时间:2023-11-27 23:28:53 28 4
gpt4 key购买 nike

我在一个程序中有这个片段(在 Visual Studio 2005 中):

if(_eof(fp->_file))
{
break;
}

当达到 eof 时,它打破了封闭循环。但是程序无法解析文件中的最后几千个字符。所以,为了找出发生了什么,我这样做了:

if(_eof(fp->_file))
{
cout<<ftell(fp)<<endl;
break;
}

现在我从 ftell 得到的答案与实际文件大小(这不是预期的)不同(并且更小)。我认为 Windows 可能对文件有问题,然后我这样做了:

if(_eof(fp->_file))
{
cout<<ftell(fp)<<endl;
fseek(fp, 0 , SEEK_END);
cout<<ftell(fp)<<endl;
break;
}

好吧,fseek() 给出了正确的答案(等于文件大小)并且初始的 ftell() 失败了(如前所述)。

知道这里可能出了什么问题吗?

编辑:文件以“rb”模式打开。

最佳答案

你不能可靠地使用 _eof()在从 FILE* 获得的文件描述符上,因为 FILE*流被缓冲。这意味着 fp吸了fp->_file干燥并将剩余的字节存储在其内部缓冲区中。最终fp->_file在eof位置,而fp仍然有字节供您阅读。使用 feof() 读取操作之后确定您是否在文件的末尾,如果您混合对 FILE* 操作的函数,请小心那些对整数文件描述符进行操作的。

关于c++ - Visual Studio 中 EOF 之前的 EOF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7282127/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com