qsort 未正确排序结构
我正在尝试对通过 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];
关于我做错了什么有什么想法吗?
谢谢
I'm trying to sort a structure I've created via qSort however it seems to be be doing what I expect it to.
This is my compare function
int compare(const void *a, const void *b) {
const INPUT *p1 = a;
const INPUT *p2 = b;
return ((p1->startTime) - (p2->startTime));
}
Where INPUT is my structure and startTime is an int within it.
I call qsort by this
qsort(*global,fileNumber,sizeof(global)/fileNumber,compare);
Where global is the variable name of INPUT, fileNumber is how many entries are within the global variable.
From the printf statements I've written it seems to do nothing.
I've initialized at the beginning of my code global like this
INPUT *global[4];
Any ideas on what I've done wrong?
Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
当您将
*global
发送到qsort
时,我可以想象您将global
定义为:因此,当您给出
sizeof(global) /fileNumber
作为qsort
的第三个参数,sizeof
可能是 4(或 64 位系统上的 8)。那么这个参数可能为零。因此,
qsort
对零元素数组不执行任何操作,并且从不调用compare
。As you send
*global
toqsort
, I can imagine that you definedglobal
as:Thus, when you give
sizeof(global)/fileNumber
as third argument toqsort
,sizeof
is probably 4 (or 8 on a 64 bits systems). Then this argument is propably zero.Hence
qsort
does nothing on a zero element array, and never callscompare
.您的全局数组是指针数组,而不是 INPUT 结构数组。因此,您的比较函数应该类似于:
以及您对 qsort() 的调用:
当然,所有这些都假设您确实将
global
用作指针数组而不是指向 INPUT 结构数组的指针。You
global
array is an array of pointers, not an array of INPUT structs. So your compare function should look something like:And your call to
qsort()
:Of course, all this assumes that you are really using
global
as an array of pointers rather than a pointer to an array of INPUT structs.