使用平台: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語言的書,發現並沒有針對這樣的問題做解析,
因此想請問各位高手,是否能解答小弟的疑惑,感謝。
作者: galaxy321 (小朱) 2014-04-24 22:36:00
你的\0被蓋掉了
作者: yvb 2014-04-25 00:37:00
你宣告大小是一回事, 你並未告知 scanf() 讀入 ch 的大小限制;比方使用 scanf("%9s", ch); /* (注意不是 "%10s") */
作者:
HuvoKu (HuvoKu.)
2014-04-25 11:27:00如果已經宣告大小了,那多於的字串是被儲存在哪裡??
就往後繼續放,沒人知道那裡有什麼以前我曾搞到連Turbo C++ 3.0的訊息和其他東東都跑出來
作者: infinitim37 (世界‧由我定義) 2014-04-25 12:39:00
感謝各位大大的解釋,我試試看 感謝果真可以,不過這樣我又有疑問?輸出已經是限定9個空格那我輸入11各字元,照道理來說應該是第11個是 \0如果這樣,\0會放在第10格嗎?那其他字元呢?會怎麼處理?
你租了10間房間但是住了16個人,如果那6間沒人住就沒差
作者: yvb 2014-04-28 13:12:00
樓樓上的意思是? 來 人不住房 ... ?