簡體   English   中英

Qsort c中的char數組

[英]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.

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