[英]Qsort a char array in c
enum rarity
{
common,
uncommon,
rare,
mythic
};
struct card
{
unsigned int id;
char* name;
char* cost;
unsigned int converted_cost;
char* type;
char* text;
char* stats;
enum rarity rarity;
} card_t ;
我的卡片結構中有 4 個條目。 例如,card[0]->name = “被仙靈偷走”,card[1]->name = “永恆隔離”,card[2]->name = “屍騎士”,card[3]-> name = "歐佐夫執行者"。
qsort(cards, cardsaccum , sizeof(char), cmpname);
在我的 qsort() 中,我認為我輸入了正確的參數。 我的 cardaccum = 4, sizeof(char) 已設置,因為我正在檢查名稱的大小,然后調用 cmpname 按順序對名稱進行排序。
int cmpname (const void *pa, const void *pb) {
const card_t *p1 = pa;
const card_t *p2 = pb;
return strcmp(p1->name, p2->name);}
在 qsort() 之后,我的排序條目只是讀取的最后一個條目,即 Orzhov Enforcer。
我不明白為什么會發生這種情況,並且想知道是否有人可以幫助解釋為什么會發生這種情況。 下面是我的一些代碼,以更好地遵循我正在做的事情。
qsort(cards, cardsaccum , sizeof(char), cmpname);
cards
的類型是card_t **
,因此數組的每個條目都是一個card_t *
。 它不是一個char
數組。 因此qsort
的第三個參數,它指定每個數組元素的大小,應該是sizeof(card_t *)
,而不是sizeof(char)
。
您還可以使用sizeof(cards[0])
或sizeof(*cards)
讓編譯器從cards
的類型中推斷出類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.