2017-09-10 13 views
0

char 포인터의 배열을 정렬하고 출력하는 함수를 작성하려고했습니다. 어떤 이유로 qsort 함수를 사용하면 출력에서 ​​정렬 할 수없는 것처럼 보입니다.qsort() C에서 char 포인터의 배열에 대해

84 : 입력은 기본적 포맷 MAC 주소의 배열이다 1B : 5E : A8 : BF : 7C

74 : E2 : F5 : 17 : 96 : 89

00 : 8E : F2 : C0 : 13 : CC

74 : E2 : F5 : 17 : 96 : 89

I 주위 보면서 섹션 qosrt 함수의 다른 예를 비교 문자열에 대한 다양한 기능을했지만, I 한 여전히 작동시키지 못합니다. 내 코드는 다음과 같습니다.

int compare_function(const void *a,const void *b) { 
return (strcmp((char *)a,(char *)b)); 
} 


void countDistinct(char* MAClist[], int n){ 
char* bufList[n]; 
for(int i = 0; i < n; i++){ 
    printf("success1 "); 
    bufList[i] = str_dup(MAClist[i]); 
    printf("success2 "); 
    printf("%s \n", bufList[i]); 
    printf("success \n"); 
} 

qsort(bufList, n, sizeof(*bufList), compare_function); 
for(int j = 0; j < n; j++){ 
    printf("%s \n", bufList[j]); 
} 

} 

내가 정렬하려고하는 이유는 고유 개체의 수를 효율적으로 계산할 수 있기 때문입니다. 그러나 정렬은 나중 단계에서 다시 수행되어야하므로 함수를 다시 사용해야합니다. 어떤 도움을 주셔서 감사합니다!

+2

하는'복귀 시도 (STRCMP ((의 char *)는, (숯불 *)를 B));'->'수익률 (을 strcmp를 (* (char **) a, * (char **) b)); – BLUEPIXY

답변

1

다음과 같이 귀하의 비교 기능을 수정해야합니다

int compare_function(const void * a, const void * b) { 
    // a, b are pointer to const char*, when passed from qsort 
    const char *pa = *(const char**)a; 
    const char *pb = *(const char**)b; 

    return strcmp(pa,pb); 
}