【发布时间】:2021-05-08 02:19:23
【问题描述】:
所以我需要使用 qsort() 对包含结构的数组进行排序
#include <stdio.h>
// =========
struct pair
{
int encounters;
};// pair{}
int compaireEncounters(const void*, const void*);
int main()
{
struct pair* working[5];
working[0]->encounters = 10;
working[1]->encounters = 3;
working[2]->encounters = 1;
qsort(working, 5, sizeof(struct pair), compareEncounters);
int i = 0;
while (i < 3)
{
printf("%d \n", working[i]->encounters)
i++;
}
}
int compaireEncounters(const void* av, const void* bv)
{
int a = ((struct pair*)av)->encounters;
int b = ((struct pair*)bc)->encounters;
return(a > b);
}
我正在尝试获取输出:
1
3
10
但是我得到了一个分段错误核心转储。
这里有什么问题?
【问题讨论】:
-
你为什么声明一个指向类型结构对的指针数组而不是相同类型的对象?!
-
我不确定你在这个问题中要问什么,因为我还是 C 的新手。但是我需要将数据从哈希表复制到我称为工作的数组中
-
什么是 unclea?一切都清楚。您声明了一个指针数组 struct pair* working[5];而不是结构对类型的对象数组,例如结构对工作[5];为什么?此外,您调用 qsort 就好像您有一个对象数组而不是指针数组 qsort(working, 5, sizeof(struct pair), compareEncounters);也就是说,您使用的是 sizeof( struct pair ) 而不是 sizeof( struct pair * )。
-
我很抱歉,因为我不知道更好,使用它的正确方法是什么?
标签: c linux ubuntu struct qsort