fread
是否对一次可读取的字节数有限制?
或者我可以阅读任何我希望收取指针的尺寸?
例如,我可以使用fread读取50MB的文件,将其充电到char指针吗?
答案 0 :(得分:4)
理论上,是的,它可以读取任意数量的字节,最大为size_t
(这是一个unsigned int
(在32位系统上大约为4GB)。但是,因为你的缓冲区将必须在一个连续的块中分配,一次读取一个大文件是不可行的,也是不可取的(对于大文件,你可能无法创建足够大的内存缓冲区来保存文件通常情况下,你将有一个较小的缓冲区并循环遍历文件,将其加载到内存中。
答案 1 :(得分:1)
在实践中,fread()
在50MB文件中没有任何问题。根据现代标准,这并不是一个“大文件”。 fread()
返回读取的项目数,并保证仅在文件结束时返回短项目计数(如果您要求的项目多于文件中的项目)或错误。您必须检查返回的项目数是否符合预期,如果很短,请使用feof()
和ferror()
来区分EOF和错误。