1

在 15.3 栏,作者介绍了如何从输入文档中随机生成文本。作者还给出了源代码

qsort(word, nword, sizeof(word[0]), sortcmp);
int sortcmp(char **p, char **q)
{   return wordncmp(*p, *q);
}

我一直对源代码中的上述几行感到困惑。qsort的最后一个参数是:

int comparator ( const void * elem1, const void * elem2 ).

但是 sortcmp 的定义不同。实际上,源代码无法在我的 VS2010 中编译。

4

1 回答 1

1

似乎这段代码最初是用更宽容(或不太符合标准)的编译器编译的。这个想法似乎是void *比较器函数的规范参数被解释为char **wordncmp()它是最长长度的字典比较的实现n,可以应用于它们。

按预期声明函数(即采用两个const void *参数)并使类型转换显式似乎可以解决问题(使用 GCC 4.7.0 测试):

int sortcmp(const void *p, const void *q) {
  return wordncmp(*(const char **)p, *(const char **)q);
}

我还必须修改wordncmp()函数的声明:

int wordncmp(const char *p, const char* q)
{
  /*.. Definition unchanged.. */
}
于 2012-08-19T09:45:20.200 回答