【发布时间】:2016-04-28 09:07:57
【问题描述】:
我正在考虑编写一个函数,该函数创建一个数组以使用 calloc 从文件中存储数据(目前为字符形式)。 据我了解,我的两个最明显的选择是读取所有字符以获得所需的总大小,使用 calloc 分配所需的空间,然后使用 fseek 到达文件的开头,并在返回之前填充数组指向数组的指针。 第二种选择是创建一个小的初始数组,在我复制时根据需要不断添加 realloc 以添加块,并且在 realloc 失败的情况下,在释放旧 calloc 之前将所有数据传输到新的更大尺寸的新 calloc,并且读取所有内容后,返回数组指针。
问题真的是,realloc 在处理大型数据集时失败的可能性有多大,好像不是我认为第二种方法在这种情况下会有优势。
据我所知,创建一个大数组然后根据需要缩小会比较棘手,所以我没有将它列为一个选项;如果我错了,请指出。
【问题讨论】:
-
您只阅读了文件的一部分就感到不舒服吗?读完整个文件,你还能活下去吗?
-
这更像是一个理论问题——我既想知道实现该功能的最佳方法,也想知道如果我愿意的话能够读取整个文件。实际上,我不太可能将它用于任何大到第一个版本无法正常工作的东西。
-
如果你正在读取一个行长不等的文本文件,问题就比较棘手了,除非你想把整个文件读入一个内存块然后遍历它。
-
什么操作系统?确实没有严格兼容的独立于操作系统的方法来使用 C 确定文件的大小。
-
我正在考虑通读直到 EOF,并增加一个计数值以确定数组大小