구조 포인터의 배열을 정렬하는 방법에 관해서 stackoverflow에 관한 많은 질문이 있습니다. 나는 그들 모두를 보았다. 아무 소용이 없다. 구조체 배열에 대한 포인터 배열을 정렬하고 싶습니다. 우선 포인터 배열에 대한 저장 공간을 할당 한 다음 구조 자체에 대한 저장 공간을 할당합니다. 모두 괜찮아 보이지만, 나는 그들을 분류 할 수 없습니다. 문제가 비교 기능에 있다고 확신합니다. 나는 stackoverflow에서 그들 중 몇 가지를 복사했습니다, 그들은 아래에 나열되어 있습니다. 그러나 그들 중 누구도함수는 배열 포인터의 배열에 대해 int를 비교하는 함수입니다.
typedef struct s_stream{
int amc;
char *name;
} dataStream;
void abc(void)
{
int count = 100;
dataStream *_UniqueStreamBuild = calloc(count, sizeof(dataStream));
dataStream **UniqueStreamBuild = calloc(count, sizeof(dataStream *));
for (int i = 0; i < count; ++i) UniqueStreamBuild[i] = _UniqueStreamBuild + i;
//**Edit: ******** **
// here I call a cascade of functions that assign values to amc; those
// functions are correct: they produce an unsorted array of amc values;
// the output I am getting is an array of structures seemingly in random order.
qsort(UniqueStreamBuild, count, sizeof(dataStream *), compare);
}
int compare (const void * a, const void * b)
{
const dataStream *x = a;
const dataStream *y = b;
if (x->amc > x->amc)
return(1);
if (x->amc < x->amc)
return(-1);
return(0);
}
int compare(const void *a, const void *b)
{
dataStream *m1 = *(dataStream **)a;
dataStream *m2 = *(dataStream **)b;
if (m1->amc > m2->amc)
return(1);
if (m1->amc < m2->amc)
return(-1);
return(0);
}
중복 가능성 [C에서 구조체의 배열을 정렬하는 방법? (http://stackoverflow.com/questions/8721189/how-to-sort-an-array-of-structs-in- c) –
예상 출력과 실제 출력이 포함 된 자기 만족적이고 정확한 결과를 제공 할 수 있습니까? http://sscce.org –
두 번째 비교 기능이 작동해야한다고 생각합니다. 첫 번째 것은 잘못되었습니다. David이 말했듯이 완전한 프로그램, 입력, 예상 출력 등을 제공해야합니다. 설명은 비교 기능이 아닐 수도 있습니다. –