我正在开发一个使用read(),write(),open()和close()处理文件的程序。我们为记录提供了一个二进制文件进行排序。

我的困惑始于阅读步骤。根据我的理解,read将文件内容放入一个字符数组。因此,如果我不完全满意,则意味着每个索引都包含一个信息字节。记录分别用空格分开。我要按每个包含的前四个字节对它们进行排序。

我知道记录的格式,但是数据的范围是可变的。幸运的是,记录之间只有空格,一个记录中没有空格。该结构是一个整数,用作表示文件头数的文件头。每个密钥为4个字节,后跟4个字节,表示有多少数据,然后是所有不带空格的数据。数据的大小不包括空格。

C库中的排序例程是否可以将它们作为字符而不是整数处理?另外,我不确定从哪里开始分离和重新排列记录。我是否必须将每个提取到记录结构的数组中并从那里排序?

我是C语言的新手,使用这些特定功能无法在网上找到很多东西。这是来自家庭作业,但截止日期已经过去;我只是想使我的理解加速。

最佳答案

如果文件是二进制文件,则在编写时-记录之间没有任何分隔,您只需要知道每个记录的大小即可(所有记录的大小都可能相同)。

为了进行排序,可以使用标准库函数,例如qsort。此函数使用您提供的回调,因此可以处理任何类型的数据。 qsort返回后,您将重新排列数据。


  我是否必须将每个提取到记录结构的数组中并从那里排序?


是的,对于少量记录(如在学生作业中),这是一个不错的选择。

10-05 20:49
查看更多