所以我的任务是抓取一个二进制文件,将其读入一个由结构组成的数组,然后根据结构中的数组对其进行排序。我坚持的部分是排序。我不确定我是应该将它排序为数组(因为二进制文件现在是一个数组)还是将其排序为结构。下面是我的部分代码。
typedef struct {
char FlightNumber[7];
char OriginCode [5];
char DestinationCode [5];
int Date [];
} FLIGHT;
int main(){
FLIGHT FlightData [3000];
/*opens file, freads it into the array then closes*/
/*trying to sort it based on OriginCode*/
int compare (const FLIGHT *a, const FLIGHT *b) {
FLIGHT *ia = (FLIGHT *)a;
FLIGHT *ib = (FLIGHT *)b;
return strcmp(ia->OriginCode, ib->OriginCode);}
qsort( FlightData, 3000, sizeof( FLIGHT ), compare);
/*to see if sorting worked...*/
for (i = 0; i < 100; i++){
printf ("%i) %s, %s, %s\n", i, FlightData[i].FlightNumber, FlightData[i].OriginCode, FlightData[i].DestinationCode );
}
}
基本上我不知道如何写比较。
最佳答案
请注意,Date
在这里的大小为零,因为您没有为它分配任何空间。取消引用它是未定义的行为。
qsort 比较函数必须具有此类型:
int compare(const void *a, const void *b)
只要您更改函数签名以匹配它,您的比较器就应该可以工作。
关于c - 如何对结构数组进行qsort,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23051964/