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

作者: infinitim37 (世界‧由我定義)   2014-04-24 18:21:00
使用平台: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語言的書,發現並沒有針對這樣的問題做解析,
因此想請問各位高手,是否能解答小弟的疑惑,感謝。
作者: prismwu   2014-04-24 18:24:00
13戒之2
作者: MOONRAKER (㊣牛鶴鰻毛人)   2014-04-24 20:52:00
那是你好運
作者: galaxy321 (小朱)   2014-04-24 22:36:00
你的\0被蓋掉了
作者: yvb   2014-04-25 00:37:00
你宣告大小是一回事, 你並未告知 scanf() 讀入 ch 的大小限制;比方使用 scanf("%9s", ch); /* (注意不是 "%10s") */
作者: MOONRAKER (㊣牛鶴鰻毛人)   2014-04-25 07:44:00
樓上實用,難得看到書會講這個
作者: HuvoKu (HuvoKu.)   2014-04-25 11:27:00
如果已經宣告大小了,那多於的字串是被儲存在哪裡??
作者: MOONRAKER (㊣牛鶴鰻毛人)   2014-04-25 11:43:00
就往後繼續放,沒人知道那裡有什麼以前我曾搞到連Turbo C++ 3.0的訊息和其他東東都跑出來
作者: infinitim37 (世界‧由我定義)   2014-04-25 12:39:00
感謝各位大大的解釋,我試試看 感謝果真可以,不過這樣我又有疑問?輸出已經是限定9個空格那我輸入11各字元,照道理來說應該是第11個是 \0如果這樣,\0會放在第10格嗎?那其他字元呢?會怎麼處理?
作者: MOONRAKER (㊣牛鶴鰻毛人)   2014-04-25 14:24:00
你哪隻眼睛看到輸出限9個空格。
作者: james732 (好人超)   2014-04-25 16:18:00
你租了10間房間但是住了16個人,如果那6間沒人住就沒差
作者: brighton16 (Alliz well)   2014-04-25 16:48:00
沒事還是別去用未定義的記憶體空間
作者: yvb   2014-04-28 13:12:00
樓樓上的意思是? 來 人不住房 ... ?
作者: verylovemary (烤地瓜)   2014-05-20 06:06:00
樓上 我想他應該是要說租16間來十個吧@..@

Links booklink

Contact Us: admin [ a t ] ucptt.com