GETS(3)

NAME
fgetc, fgets, getc, getchar, gets, ungetc - 输入字符和字符串

总览 (SYNOPSIS)
#include <stdio.h>

int fgetc(FILE *stream);
char *fgets(char *s, int size, FILE *stream);
int getc(FILE *stream);
int getchar(void);
char *gets(char *s);
int ungetc(int c, FILE *stream);

描述 (DESCRIPTION)
fgetc() 从 stream 流 中 读取 下一个 字符, 然后 从 unsigned char 类型转换 到 int 型 返回, 如果 到达 文件末尾 或 出现 错误 则 返回 EOF .

getc() 等于 fgetc() , 只是 它 可能 以 宏 的 形式 实现, 并 多次 访问 stream 流.

getchar() 等于 getc(stdin).

gets() 从 stdin 读取 一行 字符串, 保存在 s 指向的 缓冲区 中, 读到 换行符(newline) 或 EOF 时 操作 结束, 同时 把 它们 替换为 '\0'. 该函数 不检查 缓冲区溢出 (参见 后面的 BUGS 节).

fgets() 从 stream 流 中 读取 多至 size - 1 个 字符, 保存在 s 指向的 缓冲区 中, 读到 换行符(newline) 或 EOF 时 操作 结束, 如果 读到的 是 换行符, 把 换行符 也保存在 缓冲区 中. 函数 将在 最后一个 字符 后面 添加 一个 '\0' 字符.

ungetc() 把 c 转换为 unsigned char 类型 并 回送到 stream 中 供 后续的 读操作 读取. 回送的 所有 字符 将按 相反的 顺序 返回; 只保证 一个 回送 操作 的 可靠.

这里 描述的 函数 可以 混合 使用, 也可以 结合 stdio 库中 其他的 输入函数 处理 同一个 输入流.

相应的 无锁函数(non-locking) 参见 unlocked_stdio(3).

返回值 (RETURN VALUE)
fgetc(), getc() 和 getchar() 返回 从 unsigned char 类型转换 到 int 型 的 字符, 如果 操作 失败 或 到达 文件末尾 则 返回 EOF .

如果 操作 成功, gets() 和 fgets() 返回 s 指针, 否则 返回 NULL 指针, 如果 到达 文件末尾 时 还没有 读到 字符 也返回 NULL .

操作 成功 时 ungetc() 返回 c , 否则 返回 EOF .

遵循 (CONFORMING TO)
ANSI - C, POSIX.1

BUGS
永远 不要 使用 gets(). 由于 gets() 事先 不知道 数据内容, 因此 不可能 知道 应该 读取 多少 字符, 而且 gets() 会 连续 接收 字符, 即使 越过 缓冲区 的 末尾 也 不停止, 所以 这个 函数 非常 危险. 它 曾经 被用来 破坏 计算机系统 的 安全. 用 fgets() 代替.

建议 不要 混合 stdio 库的 输入函数 和 低层 read() 函数 对 输入流 对应 文件描述符 的 调用; 其 结果 没有 定义, 极可能 不是 你 需要的.

另见 (SEE ALSO)
read(2), write(2), ferror(3), fopen(3), fread(3), fseek(3), puts(3), scanf(3), unlocked_stdio(3)

TRANSBY
LinuxForum.Net CMPP 中文手册页计划 http://cmpp.linuxforum.net

* Fri Aug 20 2004 徐明 <xuming@users.sourceforge.net>
- 初始版本