©
本文档使用 PHP中文网手册 发布
在头文件<stdio.h>中定义 | ||
---|---|---|
char * gets(char * str); | (直到C11) | |
char * gets_s(char * str,rsize_t n); | (自C11以来)(可选) |
1)读stdin
入指向的字符数组,str
直到找到换行符或发生文件结束。在读入数组的最后一个字符后立即写入空字符。换行符被丢弃,但不存储在缓冲区中。
2)读取字符,stdin
直到找到换行符或发生文件结束。只将大部分n-1
字符写入指向的数组中str
,并始终写入终止空字符(除非str是空指针)。换行符(如果找到)将被丢弃,并且不计入写入缓冲区的字符数。在运行时检测到以下错误并调用当前安装的约束处理函数:
n
是零
n
大于 RSIZE_MAX
str
是一个空指针
将n-1
字符存储到缓冲区后,不会遇到endline或eof 。
无论如何,在调用约束处理程序之前,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):
K.3.5.4.1 gets_s函数(p:602-603)
C99标准(ISO / IEC 9899:1999):
7.19.7.7 gets函数(p:298)
C89 / C90标准(ISO / IEC 9899:1990):
4.9.7.7获取函数