首页 文章

使用qsort对C中的结构进行排序

提问于
浏览
0

我在C中有一个像这样的结构:

typedef struct proces {
    char ime[60];
    char pid[60];
    char ppid[60];
    char stanje;
    int stdat;
    char niti[60];
    char poraba[60];
} proces ;

我创建了大约100个并将它们放入一个数组中

proces** procesi = malloc(sizeof(proces));
int x;
for(x=0; x<st; x++){
    procesi[x] = (struct proces*)malloc(sizeof(proces));
}

现在我想用qsort对它们进行排序 . 但是qsort对它进行了错误的排序 . 该函数如下所示:

int compar_ppid(const void *v1, const void *v2){
   const proces *p1 = (proces*)v1;
   const proces *p2 = (proces*)v2;
   return(strcmp(p1->ppid, p2->ppid));
}

我检查了compar_ppid正在比较的值,它们看起来像 #d,它们应该是数字 .

我想我正在访问指针而不是值,但我无法弄清楚要改变什么来获得正确的值 .

Qsort电话:

qsort(procesi, st, sizeof(proces*), compar_name);

1 回答

  • 1

    您排序的数组包含指向 process 的指针,因此您的比较函数应如下所示:

    int compar_ppid(const void * v1, const void * v2)
    {
        process *const*p1 = v1, *const*p2 = v2;
        return strcmp((*p1)->ppid, (*p2)->ppid);
    }
    

    并且正如BLUEPIXY指出的那样,数组的分配不是使用指针大小,而是使用结构大小 .

相关问题