如何解决在 c 中对字符数组进行 Qsort
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 = "Stolen by the Fae",card[1]->name = "Eternal Isolation",card[2]->name = "尸体骑士",card[3]->name = "Orzhov Enforcer"。
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
的类型推断类型。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。