[爆卦]c字串二維陣列是什麼?優點缺點精華區懶人包

為什麼這篇c字串二維陣列鄉民發文收入到精華區:因為在c字串二維陣列這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者johnsontupm (MH)看板C_and_CPP標題[問題] 二維陣列給值的問題時間Thu...


開發平台(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

你可能也想看看

搜尋相關網站