【发布时间】:2012-08-24 05:22:46
【问题描述】:
通过反复试验,我设法使以下字符串比较函数按预期与 qsort() 一起使用,但我真的不明白为什么在 (const char*) 强制转换表达式中需要星号。有人可以剖析和解释一下吗:-
int strCompare(const void *a, const void *b) {
return strcmp((const char*)a, (const char*)b);
}
附录:-
void findStrings(int * optionStats, char strings[][MAX_STRING_SIZE + 1], int numStrings)
{
qsort(strings, numStrings, 21*sizeof(char), strCompare);
}
有没有办法通过 strCompare() 消除对 strcmp() 的调用,而只使用 strcmp() 作为 qsort() 的参数?
【问题讨论】:
-
我相信
MAX_STRING_SIZE + 1 == 21否则,你在欺骗你的编译器,当你对他们撒谎时,编译器很容易收回他们自己的东西。您最好始终对值使用相同的符号。 -
请注意,如果要对指向 char 的指针数组进行排序,则需要一个不同的字符串比较例程:
int cmpStrings(const void *a, const void *b) { char *a1 = *(char **)a; char *b1 = *(char **)b; return strcmp(a1, b1); }。 -
是 MAX_STRING_SIZE + 1 == 21,调试后将替换 21。该函数似乎排序正确,但出于好奇,我会尝试您的变体。
-
不要在你的数据上尝试我的代码;这是为了一份不同的工作!相关,但不同。