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’字符存储,但是它不理会定义好的数组的大小
谢谢大家的回答 展开
后来编了个超级简单的小程序测试,如下
#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’字符存储,但是它不理会定义好的数组的大小
谢谢大家的回答 展开
3个回答
展开全部
你说得很对,gets 不会理会数组的大小,因为它不知道数组的大小。等你自己编了使用数组作参数的函数就明白了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
貌似gets不会判断数组的上界,他会持续的向数组首地址之后写入数据,所以会出现你那种情况。通常需要把str1的上界开辟的大一点,以备万一
以上。
喝水的老狼
以上。
喝水的老狼
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询