问题标签 [feof]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
14989 浏览

c++ - 为什么 fread 提前到达 EOF?

我正在编写一个将文件读入内存的 C 库。它跳过文件的前 54 个字节(标题),然后将其余部分作为数据读取。我使用 fseek 确定文件的长度,然后使用 fread 读取文件。

循环运行一次然后结束,因为到达 EOF(没有错误)。最后,bytesRead = 10624,ftell(stream) = 28726,缓冲区包含 28726 个值。我希望 fread 在到达 EOF 时读取 30,000 个字节并且文件位置为 30054。

C 不是我的母语,所以我怀疑我在某个地方遇到了一个愚蠢的初学者错误。

代码如下:


根据您使用的参考,很明显在模式标志中添加“b”就是答案。为白痴徽章寻求提名。:-)

该参考文献在第二段第二句中谈到了它(尽管不在他们的表格中)。

MSDN直到页面的一半才讨论二进制标志。

OpenGroup提到了“b”标签的存在,但表示它“没有任何作用”。

0 投票
3 回答
748 浏览

c - 为什么这个 C 代码有问题?

另一个问题上,Jerry Coffin指出了以下几点:

它(可能)与您的问题并不真正相关,但while (!feof(fileptr)){几乎是一个有保证的错误。

我想我会开始一个单独的问题,因为该评论有点离题。有人可以向我解释一下吗?这是我之前用纯 C 语言编写的第一个程序。

0 投票
5 回答
7163 浏览

c - C 文件处理中的 feof()

我正在逐字节读取二进制文件,我需要确定是否达到了 eof。

feof() 不起作用,因为“仅在对不存在的字节进行读取请求时才设置 eof”。所以,我可以让我的自定义 check_eof 像:

但问题是,如果没有达到 eof,我的文件指针会向前移动一个字节。所以一个解决方案可能是使用ftell(),然后fseek()让它到正确的位置。

另一种解决方案可能是将字节提前缓冲在一些临时存储中。

有更好的解决方案吗?

0 投票
3 回答
1879 浏览

php - php - feof 错误

我要读取的文件是 pgp 加密文件。这是解密过程的一部分,我实际上是在尝试将内容读入一个字符串,以便我可以解密它。我不确定这是否是这里的核心问题,但我收到了一个错误:

这是文件代码:

0 投票
3 回答
534 浏览

php - PHP 的 feof 行为与 C 的

我来自 C 和 C++ 背景,但也玩过一些网络东西。我们所有的 C 人(希望如此)都知道feof在读取之前调用 aFILE*是一个错误。这是经常刺痛 C 和 C++ 新手的东西。PHP的实现也是这样吗?

我认为它必须是因为文件可能是套接字或其他任何在完成阅读之前不可能知道大小的东西。但是几乎每个 PHP 示例(即使是我在php.net上看到的那些看起来都是这样的(并且警报在我脑海中响起):

我知道最好这样写并避免这个问题:

但这不是重点。我尝试测试如果我以“错误的方式”做事情是否会失败,但我无法让它导致不正确的行为。这并不完全科学,但我认为值得一试。

那么,在 PHP中调用feofan 之前是不正确的吗?fread

PHP 可以通过多种方式完成与 C 版本不同的操作,但我觉得它们也有缺点。

  • 他们可以将其默认为!EOF。这是次优的,因为它对于某些极端情况可能是不正确的。

  • 他们可以在调用期间获取文件大小fopen,但这不适用于所有类型的文件资源,从而产生不一致的行为并且速度会变慢。

0 投票
3 回答
13937 浏览

c - 如何使用 feof(FILE *f)?

我很难使用 do-while 循环,当我们到达文件末尾时它应该停止。这是循环代码:

使用调试器运行后,我注意到我遇到的所有崩溃问题都是因为即使它到达整行也没有退出这个循环。

我应该如何正确写?

0 投票
4 回答
735 浏览

c++ - 未达到 EOF 时 feof() 返回 true

我正在尝试从特定偏移量的文件中读取(简化版本):

问题变成了,该数据将不包含 1008 个字节,而是 529 个(似乎是随机的)。当它达到 529 字节时,对 feof(data_fp) 的调用将开始返回 true。

我也尝试过读取较小的块(一次 8 个字节),但它看起来就像它在不存在时遇到了 EOF。

在十六进制编辑器中简单查看显示还有大量字节

0 投票
5 回答
262440 浏览

c - 为什么“while (!feof (file))”总是错的?

使用feof()来控制读取循环有什么问题?例如:

这个循环有什么问题?

0 投票
4 回答
4991 浏览

c - feof() 和 fgetc() 的 C 分段错误错误

谁能帮我解决我的困境?当我编译我的程序时,我没有收到任何错误或警告。但是,当我实际运行可执行文件时,会出现分段错误。如果我理解正确的话,这是因为指针被错误地使用了。我在 feof(srcIn) 行上收到一个特定错误,我不知道为什么。除了程序开始时的 srcIn = fopen(argv[0], "r") 值之外,FILE* srcIn 永远不会被分配新值。我最初用 C++ 实现了这个解决方案,出于某种原因需要将其更改为 C。无论如何,在 C++ 中,除了使用 srcIn.eof() 作为条件和 srcIn.get(something) 作为读取方法之外,我基本上做了同样的事情。它编译并运行没有任何问题。

编辑:我忘了提到当我遇到段错误时,我什至没有真正进入 main 。这使我相信可执行文件本身存在某种问题。gdb 告诉我 seg 错误在线发生:有什么 if(feof(srcIn)) 想法吗?

0 投票
2 回答
2486 浏览

c++ - 使用 fread 读取文件时重复最后一个条目

可能的重复:
为什么这个 C 代码有问题?
确定流结束时出现 EOF 问题

我正在尝试以 4 字节块读取二进制文件。然而,第一个实现(如下所示)将复制最后一个条目,并且只复制最后一个条目。

这种替代实现没有这个问题。什么时候应该使用 feof?为什么前面实现中的 feof 会导致最后一个条目被读取两次?有没有比我在 printf 语句中所做的那样转换指针更好的方法来构造缓冲区?这段代码还有什么问题吗?