[問題] dev c++ 中 scanf 疑問

看板C_and_CPP (C/C++)作者 (世界‧由我定義)時間12年前 (2014/04/24 18:21), 編輯推噓4(4016)
留言20則, 9人參與, 最新討論串1/1
使用平台:windows win7 32bit 專業版 + devc++ beta5 小弟在devc++中使用 scanf函數, 原code如下: int main() { char ch[10]; printf("keyin string:"); scanf("%s",ch); printf("hi , %s , how are you?",ch); system("pause"); return 0; } 於是小弟在輸入字串時輸入: qwertyuiopasdfg 結果螢幕居然全部顯示, 不過我不是宣告10個空間給程式嗎? 可是我看書裡面介紹, 書裡面也只是說明字串的使用方式,並沒有說明超過會怎麼樣? 我的直覺想法,如果超過,應該只會顯示9個字元吧。 於是我跑去其他書局看其他C語言的書,發現並沒有針對這樣的問題做解析, 因此想請問各位高手,是否能解答小弟的疑惑,感謝。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 210.70.10.203 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1398334862.A.137.html

04/24 18:24, , 1F
13戒之2
04/24 18:24, 1F

04/24 20:52, , 2F
那是你好運
04/24 20:52, 2F

04/24 22:36, , 3F
你的\0被蓋掉了
04/24 22:36, 3F

04/25 00:37, , 4F
你宣告大小是一回事, 你並未告知 scanf() 讀入 ch 的大小限制;
04/25 00:37, 4F

04/25 00:41, , 5F
比方使用 scanf("%9s", ch); /* (注意不是 "%10s") */
04/25 00:41, 5F

04/25 07:44, , 6F
樓上實用,難得看到書會講這個
04/25 07:44, 6F

04/25 11:27, , 7F
如果已經宣告大小了,那多於的字串是被儲存在哪裡??
04/25 11:27, 7F

04/25 11:43, , 8F
就往後繼續放,沒人知道那裡有什麼
04/25 11:43, 8F

04/25 11:44, , 9F
以前我曾搞到連Turbo C++ 3.0的訊息和其他東東都跑出來
04/25 11:44, 9F

04/25 12:39, , 10F
感謝各位大大的解釋,我試試看 感謝
04/25 12:39, 10F

04/25 12:47, , 11F
果真可以,不過這樣我又有疑問?
04/25 12:47, 11F

04/25 12:48, , 12F
輸出已經是限定9個空格
04/25 12:48, 12F

04/25 12:48, , 13F
那我輸入11各字元,照道理來說應該是第11個是 \0
04/25 12:48, 13F

04/25 12:49, , 14F
如果這樣,\0會放在第10格嗎?
04/25 12:49, 14F

04/25 12:50, , 15F
那其他字元呢?會怎麼處理?
04/25 12:50, 15F

04/25 14:24, , 16F
你哪隻眼睛看到輸出限9個空格。
04/25 14:24, 16F

04/25 16:18, , 17F
你租了10間房間但是住了16個人,如果那6間沒人住就沒差
04/25 16:18, 17F

04/25 16:48, , 18F
沒事還是別去用未定義的記憶體空間
04/25 16:48, 18F

04/28 13:12, , 19F
樓樓上的意思是? 來 人不住房 ... ?
04/28 13:12, 19F

05/20 06:06, , 20F
樓上 我想他應該是要說租16間來十個吧@..@
05/20 06:06, 20F
文章代碼(AID): #1JMEME4t (C_and_CPP)
文章代碼(AID): #1JMEME4t (C_and_CPP)