因此,我一直在编写一个程序,该程序可以扫描在Linux上使用gcc和clang编译时可以正常工作的文件。但是在Windows上,同时使用Microsoft编译器和MinGW,feof()会触发错误。一旦检测到文件类型的end语句,循环就应该中断,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;
}
}
编辑:
用“ r”代替“ rb”打开文件即可解决问题
答案 0 :(得分:1)
您使用fopen(..., "r")
打开了文件。这是一个文本文件。 ftell()
将返回正确的值以传回到fseek()
,该值与您读取的字节数的值不同,因为该库正在处理\r\n
-> { {1}}给你。
此外,您打开的文件大于等于4GB(\n
无法处理那么大的文件),或者文件中包含0x1A字节。
请注意,在Windows上使用msvcrt.dll
时,默认链接为msvcrt.dll
,它等效于Visual Studio 6运行时。您可能不想链接到它。这确实是越野车。 las this question for how to not do so无法回答。