我正在开发一个使用read(),write(),open()和close()处理文件的程序。我们为记录提供了一个二进制文件进行排序。
我的困惑始于阅读步骤。根据我的理解,read将文件内容放入一个字符数组。因此,如果我不完全满意,则意味着每个索引都包含一个信息字节。记录分别用空格分开。我要按每个包含的前四个字节对它们进行排序。
我知道记录的格式,但是数据的范围是可变的。幸运的是,记录之间只有空格,一个记录中没有空格。该结构是一个整数,用作表示文件头数的文件头。每个密钥为4个字节,后跟4个字节,表示有多少数据,然后是所有不带空格的数据。数据的大小不包括空格。
C库中的排序例程是否可以将它们作为字符而不是整数处理?另外,我不确定从哪里开始分离和重新排列记录。我是否必须将每个提取到记录结构的数组中并从那里排序?
我是C语言的新手,使用这些特定功能无法在网上找到很多东西。这是来自家庭作业,但截止日期已经过去;我只是想使我的理解加速。
最佳答案
如果文件是二进制文件,则在编写时-记录之间没有任何分隔,您只需要知道每个记录的大小即可(所有记录的大小都可能相同)。
为了进行排序,可以使用标准库函数,例如qsort。此函数使用您提供的回调,因此可以处理任何类型的数据。 qsort返回后,您将重新排列数据。
我是否必须将每个提取到记录结构的数组中并从那里排序?
是的,对于少量记录(如在学生作业中),这是一个不错的选择。