作者johnsontupm (MH)
看板C_and_CPP
標題[問題] 二維陣列給值的問題
時間Thu Aug 25 01:13:49 2011
開發平台(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
推 ericinttu:你存的資料是什麼? 又把資料存在什麼變數身上? 08/25 01:18
推 VictorTom:你要先搞清楚C語言的char字串需要在最後補'\0'當結束. 08/25 01:20
→ johnsontupm:捏? 陣列a b c裡有分別給0 1 2 08/25 01:21
→ VictorTom:還有, "123"這樣的字串, 實際上需要4個char的array來放. 08/25 01:22
→ johnsontupm:回V大 所以我只要在陣列最後給結束字元就好? 我試試 08/25 01:22
→ ericinttu:不是光加 '\0' 就好, 你合法的使用空間有多長也要想想. 08/25 01:23
→ johnsontupm:那為什麼a陣列須要給到28以上才不會有亂碼呢? 08/25 01:23
推 VictorTom:純粹是運氣好, 在你的機器以為沒事, 拿去別人機器跑不見 08/25 01:24
→ VictorTom:得不會看到亂碼. 甚至說不定你明天跑就看到亂碼了XD 08/25 01:25
→ ericinttu:你為什麼要仔細地研究不安全的行為呢? 08/25 01:26
推 VictorTom:既然你有用VC, 建議你用VC的debug工具, 再step by step 08/25 01:30
→ VictorTom:去trace你的code. 先用watch 填 &a &b &c 找到三個array 08/25 01:31
→ VictorTom:所在memory address, 然後拉出memory page把address填進 08/25 01:31
→ VictorTom:去, 然後用F10一行一行trace, 同時一邊看memory裡的值發 08/25 01:32
→ johnsontupm:恩恩 我是試試 08/25 01:32
→ VictorTom:生了什麼變化, 你就可以知道為什麼印出亂碼, 或者為什麼 08/25 01:32
→ VictorTom:運氣好沒事:) PS. &a &b &c只是這個case簡單說明, 並不 08/25 01:33
推 ericinttu:補充一下, 對待字元的方式套用到字串, 會有不好的結果. 08/25 01:33
→ VictorTom:是說要找array address看memory都是這樣做喔....@_@" 08/25 01:33