s是字符数组,申请一段连续的内存空间,可能后面的空间没有被占用,那么程序是可以改写的
不过很危险,如果要是后面被占有,而你又改写了,可能造成程序崩溃
puts是字符串操作,他的结束条件是\0,也就是说只有遇到\0才结束输出
上面说了,s数组,不管你申请几个字符的空间,puts只有在遇到\0的时候才结束输出
字符数组和字符串是有区别的
就是字符数组可以没有\0来结束
但字符串必须有\0
只能说你的运气是相当的好,程序没崩掉!在你这样的情况下,你是可以无限制的输入,只要电脑的内存足够大!!
你的问题还是出现在
1)、数组与指针的问题、还有就是puts()与gets()的函数的实现运行机制上你不了解。
数组名就代表本数组在内存分陪的内存的首元素的首地址,也是本数组的地址。
gets()函数是字符串输入函数,传入的参数是个指针形式(即地址),是从标准输入流接收字符串,函数会自己本身在字符串输入完成后加上字符串结束符'\0’;
puts()函数是字符串输出函数,传入的参数是个指针形式(即地址),是向标准输出流输出字符串,函数会在遇到字符串结束符'\0’后停止输出。
2)、数组的越界操作,是非常危险的,还有,对需要地址的函数传入数组名,系统是不会做数组的越界判定操作的,它将视为合法操作,就像你的这个题一样。
你可以进到软件的函数库里查看函数的实现体,了解其的工作原理。
当s[5]时候应该是随便输入多少个但是只接收前4个字符串数组是提供一个首地址然后逐渐存放的,当然有时候运行出问题也是有可能的,相信自己的判断。
还有,不懂可追问,望采纳
自己翻书。