结构数组的qsort无法正常工作

And*_*elt 2 c string struct qsort

我试图通过char对结构运行数组进行排序,但是当我打印数组时,没有任何内容被排序.看看这个:

struct run {
  char name[20], weekday[4], month[10];
  (And some more...)
};
typedef struct run run;

int name_compare(const void *a, const void *b) 
{
    run *run1 = *(run **)a;
    run *run2 = *(run **)b;
    return strcmp(run1->name, run2->name);
}

int count_number_of_different_persons(run results[])
{
  int i = 0;


  qsort(results, sizeof(results) / sizeof(run), sizeof(run), name_compare);

  for(i = 0; i <= 999; i++)
  {
    printf("%s\n", results[i].name);
  }
  // not done with this function yet, just return 0
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

上面的输出只是按照最初放置的顺序列出的名称

Mic*_*ker 5

int count_number_of_different_persons(run results[])
Run Code Online (Sandbox Code Playgroud)

这并不是真的让你sizeof在数组上使用,因为数组被衰减为指针.

这个

run *run1 = *(run **)a;
Run Code Online (Sandbox Code Playgroud)

也看起来很奇怪,不应该

run *run1 = (run*)a;
Run Code Online (Sandbox Code Playgroud)