C - 未调用 qsort 比较函数



所以我使用 qsort 根据我称之为"key"的结构中的 int 值对结构数组进行排序。但是,尽管我的数组已正确填充,但它似乎并没有对我的结构进行排序......

qsort 似乎从未调用我的比较函数。对函数中打印输出语句的简单测试表明了这一点。我的"测试"从未出现过。

比较功能:

int compare (const void *a, const void *b){
    struct Record* a_r = (struct Record*)(a);
    struct Record* b_r = (struct Record*)(b);
   /*test*/
     printf("test");
    return (a_r->key - b_r->key);
}

我的qsort呼叫:

    qsort(arr, (sizeof(arr)/sizeof(struct Record)), sizeof(struct Record), compare);

我的比较功能有问题吗?还是我没有传入正确的变量?

我的数组声明:

struct Record *arr = malloc(size->st_size); //where st_size is stat() of input file

sizeof(arr)是指针的大小,因为arr struct Record *定义。除以 1 struct Record的大小,这很可能是 0。

假设您的文件仅包含记录,并且您正在读取整个文件,请使用 size->st_size/sizeof(struct Record) 。或者更好的是,因为您可能无论如何都需要其他地方的记录数,请在读取输入文件后设置一个变量并使用该变量。

您需要

传递size->st_size / sizeof(struct Record)而不是sizeof(arr) / sizeof(struct Record)因为sizeof(arr)是指针的大小,并且通过推断,sizeof(Record)等于或大于指针的大小(因此您将 0 或 1 个元素传递给 qsort() ,因此qsort()不需要调用比较器,因为大小为 0 或 1 的数组已经排序。

据推测,size->st_size是固定长度记录的文件的大小,每个记录都是一个struct Record。 否则,malloc()没有多大意义。

相关内容

  • 没有找到相关文章

最新更新