[问题] 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