c语言中的字符数组的输入

如题所述

这个关系到内存里面的栈问题。。
当你
char
s[10];
时候,内存会在栈上分配地址,因为要位对齐,分配的是12个字节的,内存,大至如下,其中
C0
FF
12
00
,是上一个栈地址。0012ffc0
CC
CC
CC
CC
CC
烫烫烫.
0012FF79
CC
CC
CC
CC
CC
CC
CC
烫烫烫.
0012FF80
C0
FF
12
00
输入
12

时,
C0
就已经
占用了,
会被清为
00
,但是
0012ff00
还是一个可以
使用的栈地址,
当13
个时,
ff
也给占用了。。因此会出现
程序错误,
内存溢出
是要避免的,破坏数据,也会产生错误,
如果,你的程序时

int
i[10];
char
s[10];
scanf("%s",s);
printf("%s\n",s);
你再输入
40个也没事,s
会占用i的地址,只要不破坏
栈地址就行了。不过溢出这个
还是要检查的,程序
安全问题
温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-05-22
scanf不看到回车不会结束,因此你一次可以输入一行.
scanf不会看你要把串放到多到的数组里.
数组该多大是由你控制的.
因此,你应该把s[10]变为char
s[256]或者更大.
大到足以存储一行的输入才行
相似回答