永发信息网

char s[5]; printf("please input a string:"); gets(s); puts(s);

答案:5  悬赏:50  手机版
解决时间 2021-03-19 22:36
char s[5]; printf("please input a string:"); gets(s); puts(s);
最佳答案
这个其实你应该先搞清楚数组名的意思,
数组名其实是数组的首地址,跟指针是一样的
那么你用gets,puts都是字符串操作,
gets(s)获得数组的首地址以后,
开始从该地址(s)给数组首地址开始的内存区域开始赋值,
你输入了字符串一直到你结束,比如"abcdefg", 这个字符串是存储在内存区域的,
不会因为你定义了数组元素只有5个,内存区域就不存在.
同样 puts(s) 只是从数组首地址开始读字符串,不碰到'\0'他是不会停的~
puts函数的定义其实是这样的,对吧,他要求输入的是指针嘛
int puts(char *str);

字有点多..悲剧
全部回答
用puts 输出本来就没有限制。
s【5】是在 printf输出时才有\0限制
先要理解数组其实是一段内存区,数组名是个指针。之所以没出错是因为即使超过了五个,只要超过的不多,就也仍然处在系统给程序分配的内存里面,读写的话并不是非法访问,不会产生越界或页错误,但却有可能改写了你程序中的其他变量,所以最好不要超过。而如果输入太多,超出了分配的内存或覆盖了重要数据,就会出错了。
要是动态申请的数组,释放时就挂了,
没做越界检查
举个例子,你家旁边的房子空着或者主人不在,你家开party从你家闹到他家里,也就闹了,但不代表你这就合法了,不属于你的空间你占用了,有时也不会出问题,不过一旦那房子有了主人或者主人回来了,那就扫地出门吧,这段代码也一样,后面的内存空着你用了,但随时可能被其他程序占用
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
生态源天然茶业这个地址在什么地方,我要处理
朱丹炮轰华少现场翻脸是哪一期
“旗,府,惜,弦”都是形声字。这句话对吗?
あなたが恋しい 是什么意思
空巢留守村妇txt下载
110点四除以92竖式计算
骨髓的髓是几声
春晓农场农产品销售部我想知道这个在什么地方
和李贞贤同期的韩流男明星
方程2x+y=9在正整数范围内的解有(  )A.1
青山绿水的英语怎么说
时如白驹过隙,人不长留,情不长久,似梦非梦
47除以1.58(米)平方=多少BMI
醋泡黑豆能使白发转黑发吗?
萌大乃是什么意思
推荐资讯
手表螺丝生锈了怎么办
如何在日本用银联卡提取日元?
挖掘机工作环境都有哪些?
7k7k皮卡堂10服送金冠号要40级以上的
QQ炫舞情缘亲密值怎么加 亲密值获取攻略
立式钻床和摇臂钻床攻丝有什么区别,什么情况
德清县金融业协会地址在什么地方,想过去办事
频度副词有哪些全一点
浙江省统计局普查中心地址在哪,我要去那里办
Where there are sth 和Where are
蝴蝶有6只,蜜蜂有18只,蜜蜂的只数是蝴蝶的
德牧不立耳咋办
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?