gets()函数详解和缺陷

来源:互联网 发布:mac爱奇艺视频转换器 编辑:程序博客网 时间:2024/06/16 04:54

1.gets函数

1.1基本信息

原型:  

char *gets( char *buffer);

功能:

      gets函数从标准输入中读取一行文本,并存储于作为参数传递给它的数组中。一行文本由一串字符组成,以一个换行符('\n')结尾。在返回之前,gets函数丢弃换行符('\n'),取而代之的是以'\0'结尾。

返回值:

       读取成功,函数返回与buffer相同的指针。读入过程中遇到EOF或发生错误,函数返回NULL指针。当返回值为NULL指针时可以用feof()和ferror()来判断函数是遇到EOF还是发生错误。

例如:

char str[10];if( gets(str)!= NULL )//Danger!{printf("str = %s\n",str);}

1.2 函数缺陷

       gets函数没有限制它所读取长度,程序员应该保证buffer有足够的空间,否则buffer可能无法容纳gets所读取的内容,从而导致堆栈溢出如果溢出,多出来的字符将被写入到堆栈中,这就覆盖了堆栈原先的内容,破坏一个或多个不相关变量的值。

                                     

                                                                                图1 溢出提示

      为了安全起见,可以使用gets_s函数。


3 0
原创粉丝点击