我在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);
最佳答案
您排序的数组包含指向process
的指针,因此您的compare函数应如下所示:
int compar_ppid(const void * v1, const void * v2)
{
process *const*p1 = v1, *const*p2 = v2;
return strcmp((*p1)->ppid, (*p2)->ppid);
}
并且正如BLUEPIXY指出的那样,数组的分配不是使用指针大小,而是使用结构大小。