【发布时间】:2015-02-08 16:30:10
【问题描述】:
所以我有一个像这样的 C 函数:
int cmp (const void *a, const void* b)
return rot13cmp( (const char*)a, (const char*)b );
}
rot13cmp 是另一个函数,它接受两个 const char * 类型的参数。
我将此函数传递给 C qsort 函数的比较参数,但它似乎不起作用。
但是,如果我改为通过执行
来转换 const void * 变量return rot13cmp ( *(const char **)a, *(const char **)b );
然后该功能开始工作。我查看了这个,但每个消息来源都说第一种铸造方法应该有效,所以我想知道为什么只有第二种方法对我有用?
编辑:这是我拥有的相关代码,
int cmp (const void *a, const void *b) {
return rot13cmp( (const char *)a, (const char *)b );
}
int rot13cmp (const char *a, const char *b) {
while (*a == *b && *a != '\n') {
a++;
b++;
}
if (*a == *b) { return 0; }
else if (*a == '\n') { return 1; }
else if (*b == '\n') { return 1; }
else { return rot13(*a) - rot13(*b);
}
并且 rot13 返回一个整数,表示字母在字母表中旋转了 13 个字母的 ASCII 码。
我通过这样做调用了 qsort
qsort(words, word_count, sizeof(char*), cmp);
其中 words 是一个 char** 数组,而 word_count 是一个 int。 cmp 也只是
【问题讨论】:
-
我觉得SSCCE 会真的在这里提供帮助。
-
发生这种情况一定有不同的原因。
-
那你是怎么打电话给
qsort()的? -
如果您不向我们展示您的
a和b最初的类型,我们将一无所知。根据您的描述,我猜它们是指向指针的指针,但没有信息,这纯粹是猜测。 -
对不起,我在上面添加了相关代码。