我正在尝试对我通过qSort创建的结构进行排序,但它似乎正在做我期望的结果。
这是我的比较功能
int compare(const void *a, const void *b) {
const INPUT *p1 = a;
const INPUT *p2 = b;
return ((p1->startTime) - (p2->startTime));
}
其中INPUT是我的结构,startTime是其中的int。
我通过这个来调用qsort
qsort(*global,fileNumber,sizeof(global)/fileNumber,compare);
其中global是INPUT的变量名,fileNumber是全局变量中的条目数。
从我写过的printf语句来看,似乎什么也没做。
我已经在我的代码全局开头初始化了
INPUT *global[4];
关于我做错了什么的任何想法?
由于
答案 0 :(得分:2)
当您向*global
发送qsort
时,我可以想象您已将global
定义为:
INPUT **global;
因此,当您将sizeof(global)/fileNumber
作为qsort
的第三个参数时,sizeof
可能是4(或64位系统上的8)。那么这个论点可能是零。
因此qsort
对零元素数组不执行任何操作,并且从不调用compare
。
答案 1 :(得分:1)
你global
数组是一个指针数组,而不是INPUT结构数组。所以你的比较函数应该类似于:
int compare(const void *a, const void *b) {
const INPUT **p1 = a;
const INPUT **p2 = b;
return (((*p1)->startTime) - ((*p2)->startTime));
}
您致电qsort()
:
qsort(global,fileNumber,sizeof(global)/fileNumber,compare);
当然,所有这些都假设您确实使用global
作为指针数组而不是指向INPUT结构数组的指针。