只是我还是这个代码Programming Pearls是错误的(快速排序要2个const的空隙,不是吗?)如果是这样,我的解决方案吗?道歉,只是学习...错误qsort函数编程珍珠?
int wordncmp(char *p, char* q)
{ int n = k;
for (; *p == *q; p++, q++)
if (*p == 0 && --n == 0)
return 0;
return *p - *q;
}
int sortcmp(char **p, char **q)
{ return wordncmp(*p, *q);
}
...
qsort(word, nword, sizeof(word[0]), sortcmp);
这是一个解决方案吗?
int sortcmp(const void *p, const void *q)
{ return wordncmp(* (char * const *) p, * (char * const *) q);
}
这个标准实际上不能保证'char *`和`void *`具有相同的表示吗?我同意UB仍然使用错误的函数指针类型进行调用,但我不相信这些参数的表示是问题。问题在于,病态实现可以使用不同的调用约定来传递`void *`与`char *`,例如每种类型都有一组单独的参数寄存器。 – 2012-02-20 16:13:23