2014-04-25 3 views
0

qsort를 문자열 배열과 함께 사용하는 방법을 알아 내려고합니다. 내 코드는 다음과 같습니다.qsort 문자열 배열 비교 compare

char words[500][256]; 

int numOfWords; // this is calculated above 

int sortWordList() { 
    int length = sizeof(words)/sizeof(char *); 
    qsort(words, length, sizeof(char*), compare); 

} 

int compare (const void * a, const void * b) { 
    const char *pa = *(const char**)a; 
    const char *pb = *(const char**)b; 

    return strcmp(pa,pb); 
} 

는 그러나, 나는 ".. 위치 0X를 ### 읽기 액세스 위반"매번를 얻을 내가 무슨 잘못 잘 모릅니다. 누구든지 내 문제를 파악할 수 있습니까?

편집 : 멋진 도움에 감사드립니다. 너희들 항상 최고야.

+1

힌트 :'char'의 2 차원 배열은'char'에 대한 포인터의 배열과 같지 않습니다. – zwol

답변

1

당신은 그렇게 사용하는 대신에, 제대로 const void *const char *에 캐스팅되지 않은 : 당신이 sortWordList()에서 사용하고 같은

const char *pa = (const char *)a; 
const char *pb = (const char *)b; 

플러스 compare()sortWordList() 이상이어야합니다.

+0

이제 목록이 정렬됩니다. 그러나 목록에 90 개의 요소 만 있으면 빈 공간의 마지막 410 요소가 먼저 표시됩니다. 내 데이터가 먼저 표시되도록 할 수있는 방법이 있습니까? (결정된). – atzero