Re: [課程] 單班計程作業 15

看板b99902HW作者 (雷◎*◎+◎達)時間13年前 (2011/01/05 20:19), 編輯推噓7(7010)
留言17則, 5人參與, 最新討論串2/2 (看更多)
※ 引述《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

01/05 20:22, , 1F
你可以 po 一下你的 compare function 嗎?
01/05 20:22, 1F

01/05 20:23, , 2F
你也可以寄站內信給我 @@
01/05 20:23, 2F

01/05 20:33, , 3F
我也是遇到同樣的問題耶!!
01/05 20:33, 3F

01/05 20:38, , 4F
+1,可以compile / 跑就是了
01/05 20:38, 4F

01/05 20:47, , 5F
是說你們 compile 的時候要存成 .c 用 gcc compile
01/05 20:47, 5F

01/05 20:47, , 6F
而不是存成 .cpp (Dev-C++ 預設) 然後用 g++ compile
01/05 20:47, 6F

01/05 20:48, , 7F
理論上沒加 const 的話用 g++ (當然)不會過,
01/05 20:48, 7F

01/05 20:48, , 8F
用 gcc 則是可以通過編譯 (不過會顯示 warning)
01/05 20:48, 8F

01/05 20:59, , 9F
感謝強者解惑!
01/05 20:59, 9F

01/05 21:05, , 10F
warning 的原因大家要注意到 qsort 的第四個參數 (也就是
01/05 21:05, 10F

01/05 21:05, , 11F
argument 4) 是 int (*)(const void*, const void*)
01/05 21:05, 11F

01/05 21:06, , 12F
而非 int (*)(void*, void*) 這樣子大家應該可以推論出為
01/05 21:06, 12F

01/05 21:07, , 13F
什麼會有 warning 了.
01/05 21:07, 13F

01/05 22:37, , 14F
感謝強者!!終於懂了
01/05 22:37, 14F

01/06 00:29, , 15F
我自己的理解方式是:qsort不希望compare函式更動陣列內容
01/06 00:29, 15F

01/06 00:30, , 16F
取而代之,以回傳值告訴qsort是否要交換
01/06 00:30, 16F

01/06 00:31, , 17F
如有解讀錯誤請指正
01/06 00:31, 17F
文章代碼(AID): #1D9676O- (b99902HW)
討論串 (同標題文章)
文章代碼(AID): #1D9676O- (b99902HW)