c - 如何对结构数组进行qsort

标签 c arrays sorting struct qsort

所以我的任务是抓取一个二进制文件,将其读入一个由结构组成的数组,然后根据结构中的数组对其进行排序。我坚持的部分是排序。我不确定我是应该将它排序为数组(因为二进制文件现在是一个数组)还是将其排序为结构。下面是我的部分代码。

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/

相关文章:

c - C中的八进制到十进制多位数

php - 数组插入时间跳跃

ASP.NET MVC-如何将数组传递给 View ?

c - 如何获取标准输入的第一个字符并丢弃其余字符?

for循环可以在c中显式更改变量的值吗?

c - 快速排序算法比较次数

python - 在 Python 中模拟随机微分方程

java - 排序 HashMap 及其嵌套的 HashMap

尝试对字符串 vector 进行排序时,C++ 程序崩溃

C:数组中的第一个数字由于未知原因变为 0