wnstjd732   1년 전

[[일단 1줄 요약]]

1. qsort의 compare 함수가 잘못되었을 확률이 있다!
__________________________________________________________________

안녕하세요,,, 듣보잡 한 며칠 동안 골머리 앓다가 이것저것 시도해보다 알아낸 바보 같은 사실 알려드리려 글 써봅니다

일단, 저는 문제에서 N과 M이 500,000 이상이라고 해서, 동적할당으로 접근했어요. (원래 의도한 풀이 방식도 이거같음) 

그래서 배열 동적할당 해주고,,

char *lis[500000];

for(int i=0; i<N; i++){

    lis[i] = (char *)calloc(21, sizeof(char));

    scanf("%s", lis[i]);

}

배열 compare 함수를 선언해줬는데..!

int compare(void *first, void *second){

     return strcmp((char*)first, (char*)second);

}

안되는거에요! 근데 사실은...

int compare(void *first, void *second){

     return strcmp(*(char**)first, *(char**)second);

}

이렇게 하니까 해결되더라구요? (이것도 잘 모르겠음)

일단.... 왜인진 모르겠지만 일단 해결되었으니,, OK라는 생각입니다!

안되시는분은 참고해주시고 혹시 이 동작원리를 아시는분은 설명 가능할까요..?!

원본 코드 첨부합니당

jdeokkim   1년 전

`qsort()`의 비교 함수의 인수로 전달되는 값은 정렬할 원소의 메모리 주소입니다. 그렇기 때문에 `int` 값의 배열을 정렬하고자 한다면 `const int *`가 비교 함수의 인수로 전달되는 것이고, `char *` 값의 배열을 정렬하고자 한다면 `const char **`가 비교 함수의 인수로 전달되는 것입니다.

qsort, qsort_s - cppreference.com

wnstjd732   1년 전

@jdeokkim

감사드립니다..! 모호했던 포인터 개념때문에 일어난 일이었네요 ㅎㅎㅎ...

댓글을 작성하려면 로그인해야 합니다.