[問題] 二維陣列給值的問題

看板C_and_CPP (C/C++)作者 (MH)時間14年前 (2011/08/25 01:13), 編輯推噓5(5014)
留言19則, 3人參與, 最新討論串2/4 (看更多)
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) Dev-C++ & VC 2010 問題(Question): 之前在 #1EKY4lgk 問了有關陣列的一些問題,雖然最後問題還是沒解決,但 感謝各位前輩給我的一些意見 執行結果如圖:http://i.imgur.com/Dqlkq.png
而這次我想問的問題還是陣列,程式碼在下面,第一個二維陣列a我是一個字 元一個字元給,但直接印出字串跟之前問的一樣,後面還是有亂碼,試過若 令char a[28][28];就會不會有這個問題,但這不是根本解決之道... 第二個陣列則是一次複製一整個字串,雖然在迴圈內輸出是OK的,但出了迴圈 在新的迴圈再次印出時就又會錯了,感覺有點像把剛剛的b陣列以遞減的方式 印出,但這是為什麼呢?要如何解決? 第三個陣列也是一個一個給,比b陣列更糟糕,後面多了一拖拉庫有的沒有的 資料 以上問題已拜過Google,我對二維陣列還不是很熟,一般市面上的書也沒詳細 說過(就我在書店看過的),之後還有pointer的一些問題,一想到就頭痛..., 麻煩各位先進幫忙解惑,感謝 m(_ _)m 程式碼(Code):(請善用置底文網頁, 記得排版) http://codepad.org/Wa12HAPF -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.126.9.141

08/25 01:18, , 1F
你存的資料是什麼? 又把資料存在什麼變數身上?
08/25 01:18, 1F

08/25 01:20, , 2F
你要先搞清楚C語言的char字串需要在最後補'\0'當結束.
08/25 01:20, 2F

08/25 01:21, , 3F
捏? 陣列a b c裡有分別給0 1 2
08/25 01:21, 3F

08/25 01:22, , 4F
還有, "123"這樣的字串, 實際上需要4個char的array來放.
08/25 01:22, 4F

08/25 01:22, , 5F
回V大 所以我只要在陣列最後給結束字元就好? 我試試
08/25 01:22, 5F

08/25 01:23, , 6F
不是光加 '\0' 就好, 你合法的使用空間有多長也要想想.
08/25 01:23, 6F

08/25 01:23, , 7F
那為什麼a陣列須要給到28以上才不會有亂碼呢?
08/25 01:23, 7F

08/25 01:24, , 8F
純粹是運氣好, 在你的機器以為沒事, 拿去別人機器跑不見
08/25 01:24, 8F

08/25 01:25, , 9F
得不會看到亂碼. 甚至說不定你明天跑就看到亂碼了XD
08/25 01:25, 9F

08/25 01:26, , 10F
你為什麼要仔細地研究不安全的行為呢?
08/25 01:26, 10F

08/25 01:30, , 11F
既然你有用VC, 建議你用VC的debug工具, 再step by step
08/25 01:30, 11F

08/25 01:31, , 12F
去trace你的code. 先用watch 填 &a &b &c 找到三個array
08/25 01:31, 12F

08/25 01:31, , 13F
所在memory address, 然後拉出memory page把address填進
08/25 01:31, 13F

08/25 01:32, , 14F
去, 然後用F10一行一行trace, 同時一邊看memory裡的值發
08/25 01:32, 14F

08/25 01:32, , 15F
恩恩 我是試試
08/25 01:32, 15F

08/25 01:32, , 16F
生了什麼變化, 你就可以知道為什麼印出亂碼, 或者為什麼
08/25 01:32, 16F

08/25 01:33, , 17F
運氣好沒事:) PS. &a &b &c只是這個case簡單說明, 並不
08/25 01:33, 17F

08/25 01:33, , 18F
補充一下, 對待字元的方式套用到字串, 會有不好的結果.
08/25 01:33, 18F

08/25 01:33, , 19F
是說要找array address看memory都是這樣做喔....@_@"
08/25 01:33, 19F
文章代碼(AID): #1ELJ5H8o (C_and_CPP)
文章代碼(AID): #1ELJ5H8o (C_and_CPP)