对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 ;

我的card结构中有4个条目。例如,card[0]->name = "被费偷了", card[1]->name = "永恒的隔离"card[2]->name = "Corpse Knight", card[3]->name = "Orzhov Enforcer"

qsort(cards, cardsaccum , sizeof(char), cmpname);

在我的qsort()中,我认为我输入了正确的参数。我的cardsaccum = 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的类型推断出类型。

相关内容

  • 没有找到相关文章

最新更新