C语言中的gets函数问题!

看了很多教材都说最好在任何时候拒绝使用gets,因为没有边界检查,有可能引起缓冲区溢出.但是我在看了一本书叫"C语言编程100例"中,有一个例题使用了gets,这样使用安... 看了很多教材都说最好在任何时候拒绝使用gets,因为没有边界检查,有可能引起缓冲区溢出.但是我在看了一本书叫"C语言编程100例"中,有一个例题使用了gets,这样使用安全吗?

# include <stdio.h>
/* 宏定义 */
# define MAX 100
# define LEN 80

/* 一个非常简单的文本编辑器 */
void main()
{
char text[MAX][LEN];
register int t, i, j; /* 定义三个寄存器变量 */
/* 逐行输入字符串 */
for(t=0; t<MAX; t++)
{
printf("%d: ", t);
gets(text[t]);
if(!text[t][0])
break; /* 空行退出 */
}

/* 按行,逐个字符输出字符串 */
for(i=0; i<t; i++)
{
for(j=0; text[i][j]; j++)
putchar(text[i][j]);
putchar('\n');
}
}

请指点,谢谢
还有对这句话我不甚理解: gets(text[t]); 为什么括号里是text[t]??
展开
 我来答
liuweilhy
2008-11-23 · TA获得超过338个赞
知道小有建树答主
回答量:207
采纳率:100%
帮助的人:235万
展开全部
gets(str)有边界溢出的可能。
比如你的str定义只有80个char单元,但输入的时候却输入了80个以上的字符,那么就发生了溢出。c语言是不检查边界溢出的,编译不报错。但溢出会破坏内存中的数据,产生不可预料的后果。所以要尽量避免。
但平常练习的时候gets()函数是经常用到的,因为它用起来很方便。
我们现在所编写的程序主要是为了学习算法,并不是像专业程序员那样要求严密性,减少BUG。所以你在给字符串定义了一个足够大的长度时用gets()没关系。
话有说回来,保持一个严谨的编程风格也是很有必要的。你自己抉择吧。
text是一个二维数组,gets(text[t])是给text[t]赋值。
frankripple
2008-11-23
知道答主
回答量:5
采纳率:0%
帮助的人:6.3万
展开全部
首先这里如果行数超过MAX,输入字符超过LEN就会错。其次应该没问题。
你可以自己运行一下试试看。
gets(text[t])是把输入的字符串读入text[t]
text是个二维数组,比如第一行是abc,那么
text[0][0]='a'
text[0][1]='b'....
text[0] = 'abc\0'吧……
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式