char **items
这是我创建数组的方式。 items[0]
是第一个字符串,items[1]
是第二个字符串等。
我想按字母顺序对这些字符串进行排序,例如:
c.bmp (items[0])
b.bmp (items[1])
a.bmp (items[2])
变为:
a.bmp (items[0])
b.bmp (items[1])
c.bmp (items[2])
但是当我做qsort :(其中i
是字符串的数量)
qsort(items, i, (sizeof(char *)), cmp);
它不会按顺序结束。订单会发生变化,但不是按字母顺序排列。
这是我的cmp
功能:
int cmp(const void *a, const void *b) {
char** p1 = (char**) a;
char** p2 = (char**) b;
if( p1[1] > p2[1])
{
return -1;
}
else if (p1[1] < p2[1])
{
return 1;
}
else
{
return 0;
}
}
答案 0 :(得分:4)
你的cmp
函数不是比较字符串,只是它们在内存中的位置(更糟糕的是 - 记忆后的事物的位置,即p1[1]
而不是p1[0]
,这也是当数组的最后一个元素参与比较时产生未定义的行为。)
您可以在解除引用传递到代码中的指针后,在strcmp
内使用cmp
来解决此问题:
int cmp(const void *a, const void *b) {
char** p1 = (char**) a;
char** p2 = (char**) b;
return strcmp(*p1, *p2);
}