2013-05-05 68 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