C语言 gets函数的疑问

因为在编写一个比较复杂的程序时,感觉gets好像不是自己想像的那样后来编了个超级简单的小程序测试,如下#include"stdio.h"voidmain(){charst... 因为在编写一个比较复杂的程序时,感觉gets好像不是自己想像的那样
后来编了个超级简单的小程序测试,如下
#include"stdio.h"
void main()
{
char str1[5];
gets(str1);
printf("%s\n",str1);
}
问题是,我已经定义了字符str1数组的大小,但是要是我用gets输入比6个元素还多的是时候,它照样能完整输出来!难道gets函数 它不需要理会已经定义好的str1的大小了吗?
还有,利用gets输入时候,系统会不会自动在数组最后加上了结束标志‘\0’,如果需要,那str1[5]只能输入5个数组元素,最后一个元素位置预留给‘\0’。printf也会识别‘\0’的啊,遇到它不是 停止输出了吗
函数调用gets(str)从终端输入字符序列到字符数组str,字符序列以回车符作为结束,并将输入时的回车符转换成’\0’字符存储,但是它不理会定义好的数组的大小
谢谢大家的回答
展开
 我来答
hszhsh
2006-08-23 · TA获得超过358个赞
知道小有建树答主
回答量:407
采纳率:0%
帮助的人:404万
展开全部
gets会自动在数组后加'\0',但不会判断数组上界。所以容易出错。建议用getchar()单个输入,比较好控制。
比如:
char str1[5],c;
int i=0;
while((c=getchar())!='\n')
{
if(i<4) str1[i++]=c;
}
str1[i]='\0';
输入一行并忽略多余字符
richardbao2000
2006-08-23 · TA获得超过5342个赞
知道大有可为答主
回答量:4457
采纳率:100%
帮助的人:3882万
展开全部
你说得很对,gets 不会理会数组的大小,因为它不知道数组的大小。等你自己编了使用数组作参数的函数就明白了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wolfccb
2006-08-23 · TA获得超过658个赞
知道小有建树答主
回答量:231
采纳率:0%
帮助的人:348万
展开全部
貌似gets不会判断数组的上界,他会持续的向数组首地址之后写入数据,所以会出现你那种情况。通常需要把str1的上界开辟的大一点,以备万一

以上。
喝水的老狼
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式