qsort 未正确排序结构

发布于 2024-09-29 03:15:17 字数 591 浏览 3 评论 0原文

我正在尝试对通过 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

恬淡成诗 2024-10-06 03:15:17

当您将 *global 发送到 qsort 时,我可以想象您将 global 定义为:

INPUT **global;

因此,当您给出 sizeof(global) /fileNumber 作为 qsort 的第三个参数,sizeof 可能是 4(或 64 位系统上的 8)。那么这个参数可能为零。

因此,qsort 对零元素数组不执行任何操作,并且从不调用 compare

As you send *global to qsort, I can imagine that you defined global as:

INPUT **global;

Thus, when you give sizeof(global)/fileNumber as third argument to qsort, 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 calls compare.

知你几分 2024-10-06 03:15:17

您的全局数组是指针数组,而不是 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 结构数组的指针。

You global array is an array of pointers, not an array of INPUT structs. So your compare function should look something like:

int compare(const void *a, const void *b) {
    const INPUT **p1 = a;
    const INPUT **p2 = b;
    return (((*p1)->startTime) - ((*p2)->startTime));
}

And your call to qsort():

qsort(global,fileNumber,sizeof(global)/fileNumber,compare);

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文