C语言中数组问题

书本例题中为chars[100]。主函数为{chars[100];puts(get(s));}我把它改为chars[5],此时我能正常输入8个字符。但是我改成chars[... 书本例题中为char s[100]。
主函数为{char s[100];
puts(get(s));
}
我把它改为char s[5],此时我能正常输入8个字符。但是我改成char s[8]时,仍旧只能正常输入8个字符。我不明白为什么8个数组与5个数组能正常输入的内容一样。
求指点。
展开
 我来答
cpucash
2012-11-05 · TA获得超过1584个赞
知道小有建树答主
回答量:1457
采纳率:66%
帮助的人:967万
展开全部
s是字符数组,申请一段连续的内存空间,可能后面的空间没有被占用,那么程序是可以改写的
不过很危险,如果要是后面被占有,而你又改写了,可能造成程序崩溃
puts是字符串操作,他的结束条件是\0,也就是说只有遇到\0才结束输出
上面说了,s数组,不管你申请几个字符的空间,puts只有在遇到\0的时候才结束输出
字符数组和字符串是有区别的
就是字符数组可以没有\0来结束
但字符串必须有\0
腹剑悬针
2012-11-05 · TA获得超过234个赞
知道答主
回答量:107
采纳率:100%
帮助的人:58.2万
展开全部
只能说你的运气是相当的好,程序没崩掉!在你这样的情况下,你是可以无限制的输入,只要电脑的内存足够大!!
你的问题还是出现在

1)、数组与指针的问题、还有就是puts()与gets()的函数的实现运行机制上你不了解。
数组名就代表本数组在内存分陪的内存的首元素的首地址,也是本数组的地址。
gets()函数是字符串输入函数,传入的参数是个指针形式(即地址),是从标准输入流接收字符串,函数会自己本身在字符串输入完成后加上字符串结束符'\0’;
puts()函数是字符串输出函数,传入的参数是个指针形式(即地址),是向标准输出流输出字符串,函数会在遇到字符串结束符'\0’后停止输出。

2)、数组的越界操作,是非常危险的,还有,对需要地址的函数传入数组名,系统是不会做数组的越界判定操作的,它将视为合法操作,就像你的这个题一样。

你可以进到软件的函数库里查看函数的实现体,了解其的工作原理。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
饭雷雷1m
2012-11-05 · TA获得超过261个赞
知道答主
回答量:107
采纳率:0%
帮助的人:41.6万
展开全部
当s[5]时候应该是随便输入多少个但是只接收前4个字符串数组是提供一个首地址然后逐渐存放的,当然有时候运行出问题也是有可能的,相信自己的判断。
还有,不懂可追问,望采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
一路的泪
2012-11-05 · TA获得超过562个赞
知道小有建树答主
回答量:673
采纳率:0%
帮助的人:253万
展开全部
自己翻书。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式