2016-12-03 11 views
0

Я хочу использовать функцию qsort() в своей программе.Использование qsort в структуре, содержащей строки

Я хочу отсортировать эту структуру по строкам.

Я только что указал указатели.

Я искал в Интернете, но я не понял.

#include<stdio.h> 
#include<stdlib.h> 
#include<string.h> 
int cmpstr(const void* a, const void* b) 

{ 
    const char* aa = *(const char**)a; 
    const char* bb = *(const char**)b; 
    return strcmp(aa,bb); 
} 

typedef struct 
{ int x; 
    char a[10]; 

}alex; 
int main() 
{ 
    alex vd[10]; 
int i; 
//vd=malloc(sizeof(struct alex)*2); 
strcpy(vd[0].a,"dinamitte"); 
strcpy(vd[1].a,"alex"); 
printf("Before : \n"); 
for(i=0;i<=1;i++) 
    printf("%s ",vd[i].a); 

//qsort(v,1,sizeof (v) ,myCompare); 
int n=2; 
//qsort(v, 2, sizeof (char *), cstring_cmp); 
qsort(vd,n ,sizeof(alex),cmpstr); 
//qsort() 
printf("\nAfter : \n"); 
for(i=0;i<=1;i++) 
    printf("%s \n",vd[i]); 
    return 0; 
} 

После компилировать, он пишет на экране «dinamitte» и «AleX», а затем некоторые странные символы.

+0

Ваш 'функции cmpstr' неправильно. потому что вершина члена 'alex' имеет' int'. – BLUEPIXY

+0

, но не должен ли я вернуть значение? –

+0

Также 'printf ("% s \ n ", vd [i]);' typo as 'printf ("% s \ n ", vd [i] .a);' – BLUEPIXY

ответ

0

исправить так:

typedef struct { 
    int x; 
    char a[10]; 
} alex; 

int cmpstr(const void* a, const void* b){ 
    const alex *aa = a; 
    const alex *bb = b; 
    return strcmp(aa->a, bb->a); 
} 

Также printf("%s \n",vd[i]); опечатка в printf("%s \n",vd[i].a);

+0

и if если хотите заменить этот «typedef»? как это должно выглядеть? –

+0

@AlexandruBucurie Он должен быть определен перед использованием с 'cmpstr'. – BLUEPIXY

+0

и что делать, если у меня есть –