다음 코드에서 문자열을 비교하는 주석 처리 된 부분을 제거하면 seg 11 오류가 발생합니다. 나는 이유를 이해할 수 없다! 나머지 코드는 정상적으로 작동합니다. 어떤 도움을 주셔서 감사합니다! compare_names()
에서QSORT 함수가 C
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int compare_scores_desc(const void* scorea, const void* scoreb){
int a = *(int*)scorea;
int b = *(int*)scoreb;
return a-b;
}
int compare_names(const void* namea, const void* nameb){
char** a = *(char**)namea;
char** b = *(char**)nameb;
return strcmp(*a,*b);
}
int main(int argc, char* argv[]){
int scores[7] = {456,234,65,563,67,19,100};
int i;
qsort(scores,7,sizeof(int),compare_scores_desc);
puts("\nThese are the scores in order : \n");
for(i=0;i<7;i++)
printf("%i\n",scores[i]);
char *names[] = {"Krishna","Rama","Bhishma","Arjuna"};
/*qsort(names,4,sizeof(char*),compare_names);*/
puts("------------------");
puts("The names in order are : \n");
for(i=0;i<4;i++)
printf("%s\n",names[i]);
return 0;
}
아래 투표에 대한 설명에 감사드립니다. 감사합니다! – jxh
그 좋은 (* a> * b) - (* a <* b)'+1. – Kaz
@ 카즈 : 전에 본 적이 있었지만, [Ambroz의 대답] (http://stackoverflow.com/a/10997428/315052)을 읽었을 때 나는 그것을 마음에 담아 냈습니다. – jxh