作者radar735 (雷◎*◎+◎達)
看板b99902HW
標題Re: [課程] 單班計程作業 15
時間Wed Jan 5 20:19:15 2011
※ 引述《realturner (rt)》之銘言:
: 題目述敘有更新,請同學去查看
: 另外最後一筆測資因為檔案很多(~30000)
: 如果用 strcpy 會因為空間不夠而無法執行
: 產生「使用到不該用的記憶體」的錯誤
: 其實只要記指標就好了
: 同樣地,用完一個檔記得就要關
: 因為系統會限制同時能開的檔案數
: 最後,如果你都做了,而且用了 qsort 還是超時的話
: 請多丟幾次,第二次通常會比較快
各位強者好 在下做這次的homework時碰上一個問題
雖然已經靠估狗解決 卻還是不知道為什麼會這樣 因此上來向各位請教
先說我是用 DEV C
我本來的compare函式長這樣:
int compare(void *data1,void *data2)
在編譯的時候 出現如下的錯誤訊息:
passing argument 4 of ‘qsort’ from incompatible pointer type
我為此百思不得其解 因為這和老師講義上面的形式明明一模一樣
後來辜狗了一下 看到一堆英文中 好像說要加const
於是我就把函式改成這個樣子:
int compare(
const void *data1,
const void *data2)
然後就可以過了......
但是我完全不知道為什麼要加......
我把老師講義的程式複製到DEV C
他沒有加const也照樣可以編譯可以跑
但是我自己的就得加
請問那個錯誤訊息和const的關係到底是甚麼?
感謝各位大大~
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 119.77.199.111
1F:推 skyly:你可以 po 一下你的 compare function 嗎? 01/05 20:22
2F:→ skyly:你也可以寄站內信給我 @@ 01/05 20:23
3F:推 pp31630:我也是遇到同樣的問題耶!! 01/05 20:33
4F:推 wctaiwan:+1,可以compile / 跑就是了 01/05 20:38
5F:推 skyly:是說你們 compile 的時候要存成 .c 用 gcc compile 01/05 20:47
6F:→ skyly:而不是存成 .cpp (Dev-C++ 預設) 然後用 g++ compile 01/05 20:47
7F:→ skyly:理論上沒加 const 的話用 g++ (當然)不會過, 01/05 20:48
8F:→ skyly:用 gcc 則是可以通過編譯 (不過會顯示 warning) 01/05 20:48
9F:→ radar735:感謝強者解惑! 01/05 20:59
10F:推 skyly:warning 的原因大家要注意到 qsort 的第四個參數 (也就是 01/05 21:05
11F:→ skyly:argument 4) 是 int (*)(const void*, const void*) 01/05 21:05
12F:→ skyly:而非 int (*)(void*, void*) 這樣子大家應該可以推論出為 01/05 21:06
13F:→ skyly:什麼會有 warning 了. 01/05 21:07
14F:推 pp31630:感謝強者!!終於懂了 01/05 22:37
15F:推 bill8124:我自己的理解方式是:qsort不希望compare函式更動陣列內容 01/06 00:29
16F:→ bill8124:取而代之,以回傳值告訴qsort是否要交換 01/06 00:30
17F:→ bill8124:如有解讀錯誤請指正 01/06 00:31