繁体   English   中英

qsort未正确排序结构

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM