gets

gets, gets_s

在头文件中定义
char * gets(char * str);(直到C11)
char * gets_s(char * str,rsize_t n);(自C11以来)(可选)

1)读stdin入指向的字符数组,str直到找到换行符或发生文件结束。在读入数组的最后一个字符后立即写入空字符。换行符被丢弃,但不存储在缓冲区中。

2)读取字符,stdin直到找到换行符或发生文件结束。只将大部分n-1字符写入指向的数组中str,并始终写入终止空字符(除非str是空指针)。换行符(如果找到)将被丢弃,并且不计入写入缓冲区的字符数。在运行时检测到以下错误并调用当前安装的约束处理函数:

  • n 是零

无论如何,在调用约束处理程序之前,gets_s首先完成读取和放弃字符,stdin直到换行符,文件结束条件或读取错误。作为所有边界检查函数,gets_s只有在被__STDC_LIB_EXT1__实现定义__STDC_WANT_LIB_EXT1__并且1在包含之前用户定义为整数常量时才能保证可用<stdio.h>。

参数

str-要写入的字符串

返回值

str成功时,NULL失败。

如果失败是由文件结束条件引起的,则另外设置eof指示符(参见feof()stdin。如果故障是由其他错误引起的,请设置错误指示器(参见ferror()stdin

注意

gets()函数不执行边界检查,因此该函数极易受缓冲区溢出攻击的影响。它不能安全使用(除非程序在限制可能出现的内容的环境中运行stdin)。出于这个原因,该功能在C99标准的第三勘误中已被弃用,并在C11标准中完全删除。fgets()并且gets_s()是推荐的替代品。

切勿使用 gets()**。**

参考

  • C11标准(ISO / IEC 9899:2011):