【fgets】一、
`fgets` 是 C 语言标准库中的一个函数,用于从文件或输入流中读取字符串。它常用于读取文本行,适用于需要逐行处理文件内容的场景。与 `gets` 函数不同,`fgets` 更加安全,因为它可以指定缓冲区大小,防止缓冲区溢出问题。
`fgets` 的基本用法是将指定长度的字符从输入流中读入到一个字符数组中,并在末尾自动添加空字符(`\0`)。如果读取过程中遇到换行符或者文件结束符,则停止读取并保留这些字符。
该函数在处理文件时非常实用,尤其是在读取配置文件、日志文件或用户输入时,能够有效避免内存越界等常见错误。
二、表格对比
| 项目 | 内容 |
| 函数名 | `fgets` |
| 所属头文件 | `stdio.h` |
| 功能 | 从文件或输入流中读取字符串 |
| 返回值 | 成功时返回指向读取字符串的指针;失败或遇到 EOF 时返回 `NULL` |
| 参数说明 | - `char s`:存储读取内容的字符数组 - `int n`:最多读取的字符数(包括结尾的 `\0`) - `FILE stream`:输入流(如 `stdin` 或文件指针) |
| 安全性 | 相对安全,可避免缓冲区溢出 |
| 与 `gets` 的区别 | `fgets` 可以指定最大长度,而 `gets` 没有此限制,容易引发安全问题 |
| 常见用途 | 读取文件内容、用户输入、配置信息等 |
| 注意事项 | - 读取后需检查返回值是否为 `NULL` - 若读取到换行符,会将其包含在结果中 |
三、使用示例
```c
include
int main() {
FILE fp = fopen("example.txt", "r");
char line[100];
if (fp == NULL) {
printf("无法打开文件。\n");
return 1;
}
while (fgets(line, sizeof(line), fp)) {
printf("%s", line);
}
fclose(fp);
return 0;
}
```
该代码演示了如何使用 `fgets` 从文件中逐行读取内容并输出。
四、总结
`fgets` 是 C 语言中非常实用且安全的字符串读取函数,尤其适合处理文本文件。相比 `gets`,它提供了更严格的边界控制,降低了程序崩溃或数据损坏的风险。在实际开发中,建议优先使用 `fgets` 而不是 `gets`,以提高程序的健壮性和安全性。


