構造体ポインタの配列をソートする方法については、stackoverflowに関する多くの質問があります。私はそれらをすべて見て、役に立たなかった。私は構造体の配列へのポインタの配列をソートしたい。私は最初にポインタ配列のための記憶域を割り当て、次に構造体そのものに記憶域を割り当てます。すべてのことがうまく見えるが、私はそれらを並べ替えることはできません。私は問題が比較機能にあると確信しています。私はstackoverflowからそれらのいくつかをコピーしました。それらは以下にリストされています。しかし、それらのどれも動作していない、私はちょうど下のそれとこのバージョンの間で気付かなかった、いくつかの違いがありますしない限り...関数は、qsortを使用しているときに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 –
私はあなたの2番目の比較機能が動作するはずだと思います。最初のものは間違っています。デービッドの言うとおり、完全なプログラム、入力、期待される出力などを提供するべきです。説明は比較機能ではないかもしれません。 –