非常教程

C参考手册

文件输入/输出 | File input/output

gets_s

Defined in header <stdio.h>

char *gets( char *str );

(until C11)

char *gets_s( char *str, rsize_t n );

(since C11) (optional)

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获取函数
C

C 语言是一门通用计算机编程语言,应用广泛。C 语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。