[英]qsort not sorting structure correctly
我正在尝试对通过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];
关于我做错了什么的任何想法?
谢谢
当您向qsort
发送*global
时,我可以想象您将global
定义为:
INPUT **global;
因此,当您将sizeof(global)/fileNumber
用作qsort
第三个参数时, sizeof
可能为4(在64位系统上为8)。 那么这个参数大概为零。
因此, qsort
在零元素数组上不执行任何操作,并且从不调用compare
。
global
数组是指针数组,而不是INPUT结构数组。 因此,您的compare函数应类似于:
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结构数组的指针。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.