[問題] qsort compare 與 strcmp 轉型問題
qsort 的參數4 沒辦法直接丟 strcmp 進去,
是因為型態的問題嗎?還是兩個 compare 比較對象不同?
----
QSORT(3) FreeBSD Library Functions Manual QSORT(3)
void
qsort(void *base, size_t nmemb, size_t size,
int (*compar)(const void *, const void *));
STRCMP(3) FreeBSD Library Functions Manual STRCMP(3)
int
strcmp(const char *s1, const char *s2);
----
原本的想法是
qsort 的參數 要傳的 compare function 參數型態是 (const void *, const void *)
strcmp 的參數型態是 (const char *, const char *)
所以參數要從 void 換成 char
不過不知道怎麼轉型這種函式庫的 function ,所以 Google 出這個:
http://twpug.net/docs/ccfaq/node228.html
----
int pstrcmp(const void *p1, const void *p2)
{
return strcmp(*(char * const *)p1, *(char * const *)p2);
}
----
不過看到這裡,感覺像不只是 void -> char 的問題而已
看很久看不懂 return strcmp(*(char * const *)p1, *(char * const *)p2);
的意義為何..... 網頁好像一堆大陸用語,也看不太懂.....
意思是不是,qsort 和 strcmp 的比較對象不同?
所以要另外生一個用指標指向字串的 compare function?
那行轉型的邏輯也搞不清楚...
另外,這麼看來每次要用 qsort 時 compare function 都要自己寫一個來轉型才行囉?
原本系統裡的函式庫是不是都無法直接塞入 qsort?
抱歉問題很多,謝謝解惑!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.123.222.191
→
03/17 18:42, , 1F
03/17 18:42, 1F
→
03/17 18:42, , 2F
03/17 18:42, 2F
→
03/17 20:57, , 3F
03/17 20:57, 3F
→
03/18 00:36, , 4F
03/18 00:36, 4F
→
03/18 00:53, , 5F
03/18 00:53, 5F
→
03/18 00:53, , 6F
03/18 00:53, 6F
→
03/18 03:28, , 7F
03/18 03:28, 7F
→
03/18 03:31, , 8F
03/18 03:31, 8F
→
03/18 03:34, , 9F
03/18 03:34, 9F
→
03/18 03:35, , 10F
03/18 03:35, 10F
→
03/18 03:36, , 11F
03/18 03:36, 11F
→
03/18 03:37, , 12F
03/18 03:37, 12F
→
03/18 03:38, , 13F
03/18 03:38, 13F
→
03/18 03:38, , 14F
03/18 03:38, 14F
→
03/18 12:04, , 15F
03/18 12:04, 15F
→
03/18 12:04, , 16F
03/18 12:04, 16F
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 1 之 2 篇):