簡體   English   中英

結構數組的qsort無法正常工作

[英]qsort of struct array not working

我試圖通過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;
}

上面的輸出只是按照最初放置的順序列出的名稱

int count_number_of_different_persons(run results[])

這並不能讓你在數組上使用sizeof ,因為數組會被衰減為指針。

這個

run *run1 = *(run **)a;

也看起來很奇怪,不應該

run *run1 = (run*)a;

一個問題是在name_compare 試試這個:

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

檢查以下代碼:

正如@michel所提到的,sizeof(array)提供了指針的大小,而不是數組本身的大小,因為在傳遞數組時它被視為指針。 因此,要么將元素數發送到函數count_number_of_different_persons,要么定義元素數量的MACRO。 希望這可以幫助。 :)。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define NOE 3

struct run
{
    char name[20];
};

typedef struct run run;

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

int count_number_of_different_persons(run results[], int noOfElements)
{
    int i=0;
    qsort(results, noOfElements, sizeof (run), name_compare);
    for (i=0; i<noOfElements; i++)
        printf ("%s\n",results[i].name);
}

int main ( int argc, char * argv[])
{
    run a, b, c;
    run  arg[NOE];

    strcpy (a.name, "love");
    strcpy (b.name, "you");
    strcpy (c.name, "i");
    arg[0] = a;
    arg[1] = b;
    arg[2] = c;

    count_number_of_different_persons(arg, sizeof(arg)/sizeof(run));
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM