4

一次读取的字节数是否fread有限制?或者我可以读取任何我想充电到我的指针的大小?例如,我可以一次使用 fread 将 50MB 的文件读取到 char 指针中吗?

4

2 回答 2

6

从理论上讲,是的,它最多可以读取任意数量的字节size_t(这是一个unsigned int(在 32 位系统上大约为 4GB)。但是,由于您的缓冲区必须分配在一个连续的块中,因此不太可能一次读取大文件是可行的,也不可取的(对于非常大的文件,您可能无法创建足够大的内存缓冲区来容纳文件)。通常,您将有一个较小的缓冲区并循环文件以块的形式将其加载到内存中。

于 2013-09-18T18:48:11.580 回答
2

在实践中,fread()在 50MB 的文件中啜饮是没有问题的。按照现代标准,这并不是真正的“大文件”。fread()返回读取的项目数,并保证仅在文件结尾(如果您要求的项目多于文件中的项目)或错误时返回短项目计数。您必须检查返回的项目计数是否符合您的预期,如果它很短,请使用feof()andferror()来区分 EOF 和错误。

于 2013-09-18T19:52:05.773 回答