跳转到内容

gets : 获取字符串(已过时,请改用 fgets)

#include <stdio.h>
char *gets(char *buf); char *_gets_r(void *reent, char *buf);
```### 描述
从标准输入读取字符,直到找到换行符为止。直到换行符之前的字符存储在 buf 中。换行符被丢弃,并且缓冲区以 0 终止。
这是一个危险的函数,因为它无法检查 buf 中可用空间的大小。1988 年的 Internet 蠕虫所使用的攻击之一就是利用此函数来溢出在 finger 守护进程的堆栈上分配的缓冲区,并覆盖返回地址,从而导致该守护进程执行通过连接下载到其中的代码。
备用函数 _gets_r 是一个可重入版本。额外的参数 reent 是一个指向可重入结构的指针。### 返回值
gets 返回传递给它的缓冲区,其中已填入数据。如果在已累积部分数据时发生文件结束,则返回这些数据而不给出任何其他指示。如果在缓冲区中没有数据时发生文件结束,则返回 NULL。
需要的操作系统支持子例程:close、fstat、isatty、lseek、read、sbrk、write。
---
**权威来源**: BUSMASTER DITA help source `gets.dita`, compiled into `BUSMASTER.CHM` with the application.