2013-05-05 67 views
0

我有一个像这样在C结构:用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(procesi, st, sizeof(proces*), compar_name); 
+2

'proces ** procesi = malloc(sizeof(proces));'--->'proces ** procesi = malloc(st * sizeof(proces *));' – BLUEPIXY 2013-05-05 10:21:22

回答

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指出分配数组不使用指针大小,但结构大小。

+0

它现在可以工作,但我得到警告:警告:初始化从指针目标类型[默认启用]丢弃'const'限定符 – Pero44 2013-05-05 10:42:21

+0

我的不好。修正了这个例子。我几乎没有使用'const'我自己,被高估了。 – 2013-05-05 10:57:10