char s[5]; printf("please input a string:"); gets(s); puts(s);
答案:5 悬赏:50 手机版
解决时间 2021-03-19 22:36
- 提问者网友:疯孩纸
- 2021-03-19 17:29
char s[5]; printf("please input a string:"); gets(s); puts(s);
最佳答案
- 五星知识达人网友:等灯
- 2021-03-19 18:53
这个其实你应该先搞清楚数组名的意思,
数组名其实是数组的首地址,跟指针是一样的
那么你用gets,puts都是字符串操作,
gets(s)获得数组的首地址以后,
开始从该地址(s)给数组首地址开始的内存区域开始赋值,
你输入了字符串一直到你结束,比如"abcdefg", 这个字符串是存储在内存区域的,
不会因为你定义了数组元素只有5个,内存区域就不存在.
同样 puts(s) 只是从数组首地址开始读字符串,不碰到'\0'他是不会停的~
puts函数的定义其实是这样的,对吧,他要求输入的是指针嘛
int puts(char *str);
字有点多..悲剧
数组名其实是数组的首地址,跟指针是一样的
那么你用gets,puts都是字符串操作,
gets(s)获得数组的首地址以后,
开始从该地址(s)给数组首地址开始的内存区域开始赋值,
你输入了字符串一直到你结束,比如"abcdefg", 这个字符串是存储在内存区域的,
不会因为你定义了数组元素只有5个,内存区域就不存在.
同样 puts(s) 只是从数组首地址开始读字符串,不碰到'\0'他是不会停的~
puts函数的定义其实是这样的,对吧,他要求输入的是指针嘛
int puts(char *str);
字有点多..悲剧
全部回答
- 1楼网友:一袍清酒付
- 2021-03-19 21:09
用puts 输出本来就没有限制。
s【5】是在 printf输出时才有\0限制
s【5】是在 printf输出时才有\0限制
- 2楼网友:话散在刀尖上
- 2021-03-19 20:41
先要理解数组其实是一段内存区,数组名是个指针。之所以没出错是因为即使超过了五个,只要超过的不多,就也仍然处在系统给程序分配的内存里面,读写的话并不是非法访问,不会产生越界或页错误,但却有可能改写了你程序中的其他变量,所以最好不要超过。而如果输入太多,超出了分配的内存或覆盖了重要数据,就会出错了。
- 3楼网友:几近狂妄
- 2021-03-19 20:23
要是动态申请的数组,释放时就挂了,
没做越界检查
没做越界检查
- 4楼网友:洎扰庸人
- 2021-03-19 19:02
举个例子,你家旁边的房子空着或者主人不在,你家开party从你家闹到他家里,也就闹了,但不代表你这就合法了,不属于你的空间你占用了,有时也不会出问题,不过一旦那房子有了主人或者主人回来了,那就扫地出门吧,这段代码也一样,后面的内存空着你用了,但随时可能被其他程序占用
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯