[問題] 關於字元指標

看板C_and_CPP作者 (ppttcc)時間13年前 (2010/10/18 12:19), 編輯推噓3(3010)
留言13則, 5人參與, 最新討論串1/1
同樣這一段 char *name; cout<<"input name:"; cin>>name; 若寫在main()裡,可以正常執行. 但若以成員函數(或friend函數)寫,則輸入後會當掉,用cin.getline()也是會當 但若改成char name[10]則cin或cin.getline()則都正常 或改寫為char *name=new char[10]; 也正常. 問題1. 是否是因h檔並未實際分配記憶體所致?(指標的空間及所指之空間) 但執行後就應分配記憶體,不是嗎? 且為何寫在main()裡就可以?但即使寫在main裡,指標也未接收new所分配的空間, 照樣正常執行阿? 問題2. 實際輸入時,若輸入超過10個字元,若在15個以下,仍然正常結束. (這似乎是一個字組,但字組是16個bit而非byte呀?) 但若超過15個則不正常結束,why?? 若將大小改成16,則最多只能輸入15個字元,多一個就當掉. 這根據的是什麼呢?是否意味陣列大小最好是16的倍數? os:xp 編譯環境:dev c++ 4.9.9.2 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.38.20.169 ※ 編輯: ppttcc 來自: 114.38.20.169 (10/18 12:20) ※ 編輯: ppttcc 來自: 114.38.20.169 (10/18 12:22)

10/18 12:22, , 1F
問題一:main()裡面可以是因為「運氣好」
10/18 12:22, 1F

10/18 12:22, , 2F
問題二:超過10個字元正常結束:運氣好
10/18 12:22, 2F

10/18 12:22, , 3F
運氣好的意思,就是換個開發環境/作業系統就可能會掛掉
10/18 12:22, 3F

10/18 12:23, , 4F
陣列大小若考慮對齊的話最好是4的倍數
10/18 12:23, 4F

10/18 12:25, , 5F
4的倍數在組語會有比較高的執行效能 x86
10/18 12:25, 5F

10/18 12:28, , 6F
若是char[10],因對齊的關係,溢出一位兩位還不會溢到
10/18 12:28, 6F

10/18 12:29, , 7F
下一個資料,也就是運氣好XD
10/18 12:29, 7F
剛我測了一下,若我改成8,但我實際輸入了20個字元,可正常結束... 我快瘋了... ※ 編輯: ppttcc 來自: 114.38.20.169 (10/18 12:33)

10/18 12:32, , 8F
去買《程式設計師的自我修養》就會懂原理了,要是看不懂
10/18 12:32, 8F

10/18 12:33, , 9F
書寫的,再去買 The Art of Assembly Language
10/18 12:33, 9F

10/18 12:34, , 10F
再強調一次,運氣好,就是說可能掛掉也可能不會掛掉
10/18 12:34, 10F

10/18 12:34, , 11F
但只要有可能掛掉就不是好的寫法
10/18 12:34, 11F

10/18 12:40, , 12F
置底文看一看 加強一下觀念
10/18 12:40, 12F

10/19 19:35, , 13F
你在設個char變數 運氣好可以改變那20字元的其中幾個
10/19 19:35, 13F
文章代碼(AID): #1CkygsBC (C_and_CPP)