prev up next   top/contents search

comp.lang.c FAQ 列表· 问题 13.8

Q我正尝试使用qsort来对一个字符串数组进行排序,并使用strcmp作为比较函数,但它不起作用。


A您说的“字符串数组”很可能指的是“指向char的指针数组”。qsortqsortchar. strcmp的比较函数的参数是指向被排序对象的指针,在这个例子中,是指向指向char的指针。然而,strcmp接受的是指向

/* compare strings via pointers */
int pstrcmp(const void *p1, const void *p2)
{
	return strcmp(*(char * const *)p1, *(char * const *)p2);
}

的简单指针。因此,const void *比较函数的参数被表示为“通用指针”,char。它们被转换回它们“真实的”类型(指向指向char *strcmp.

。对qsort的调用可能看起来像这样:

#include <stdlib.h>
char *strings[NSTRINGS];
int nstrings;
/* nstrings cells of strings[] are to be sorted */
qsort(strings, nstrings, sizeof(char *), pstrcmp);

(不要被 K&R2 第 5.11 节第 119-20 页的讨论误导,该讨论并没有讨论标准库的qsort,并且做了一个无声的、不必要的关于char *void *).

和指向指针的指针等价的假设。)关于qsort比较函数——它们是如何被调用的以及它们必须如何声明——请参阅问题 13.9

参考文献:ISO Sec. 7.10.5.2
H&S Sec. 20.5 p. 419


prev up next   contents search
关于此 FAQ 列表   关于 Eskimo   搜索   反馈   版权

Eskimo North 托管