只是我還是這個代碼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