年轻人手脚发麻:C语言 gets函数的疑问

来源:百度文库 编辑:高考问答 时间:2024/05/08 06:49:18
因为在编写一个比较复杂的程序时,感觉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’字符存储,但是它不理会定义好的数组的大小
谢谢大家的回答

gets会自动在数组后加'\0',但不会判断数组上界。所以容易出错。建议用getchar()单个输入,比较好控制。
比如:
char str1[5],c;
int i=0;
while((c=getchar())!='\n')
{
if(i<4) str1[i++]=c;
}
str1[i]='\0';
输入一行并忽略多余字符

你说得很对,gets 不会理会数组的大小,因为它不知道数组的大小。等你自己编了使用数组作参数的函数就明白了。

貌似gets不会判断数组的上界,他会持续的向数组首地址之后写入数据,所以会出现你那种情况。通常需要把str1的上界开辟的大一点,以备万一

以上。
喝水的老狼