gpt4 book ai didi

c - Windows 下 feof() 的奇怪行为

转载 作者:行者123 更新时间:2023-11-30 14:39:54 27 4
gpt4 key购买 nike

所以我一直在编写一个程序来扫描文件,在 Linux 上使用 gcc 和 clang 编译时该程序运行得很好。但在 Windows 上,同时使用 Microsoft 编译器和 MinGW,feof() 会错误触发。一旦检测到文件类型的结束语句,循环就会中断,feof 仅作为故障保护,永远不会在 Linux 上触发正确的文件...

我让程序用 ftell() 打印文件指针位置,但这些值完全错误。 EOF 始终在 2^n 值处触发,该值比实际文件大小低一些数量级...

while(1)
{
...
//File is read here
//normally breaks before EOF-check

if(feof(in))
{
DEBUG_PRINTF("Reached EOF before IEND\n");
break;
}
}

编辑:

使用“rb”而不是“r”打开文件解决了问题

最佳答案

您使用fopen(..., "r")打开了文件。这是一个文本文件。 ftell() 将返回正确的值传递回 fseek(),这些值与您读取的字节数不同,因为库正在为您处理 \r\n -> \n

此外,您打开的文件 >= 4GB(msvcrt.dll 无法处理那么大的文件),或者文件中有 0x1A 字节。

请注意,在 Windows 上使用 gcc 时,默认链接到 msvcrt.dll,它大约相当于 Visual Studio 6 运行时。您可能不想链接到它。这真的很麻烦。唉this question for how to not do so没有得到答复。

关于c - Windows 下 feof() 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55857088/

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