繁体   English   中英

qsort比较函数未调用?

[英]qsort comparison function not invoked?

因此,我使用qsort根据我称为“键”的结构中的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 * 除以一个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()毫无意义。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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