首页 > 编程笔记 > C语言笔记

C语言fgets()函数的用法(非常详细)

C语言中的 fgets() 函数用于从指定的文件流中读取字符串。fgets() 的设计旨在安全地读取输入,避免缓冲区溢出的风险,这使得它成为处理文本输入的首选函数之一。
 

fgets() 位于 <stdio.h> 头文件中,它的函数的原型如下:

char *fgets(char *str, int n, FILE *stream);

fgets() 函数接受三个参数:


fgets() 函数的返回值有两种情况:


fgets() 函数的核心作用是从指定的文件流中读取字符,直到遇到以下三种情况之一:


读取的字符串会被存储在 str 指向的数组中,并在末尾自动添加空字符'\0'以形成一个有效的 C 字符串。
 

fgets() 的一个重要特性是它会保留读取到的换行符,这意味着如果输入行以换行符结束,该换行符也会被存储在 str 中,除非缓冲区已满。这个特性使得 fgets() 能够准确地保留输入的原始格式,包括空行。


另一个关键点是 fgets() 的安全性。通过指定最大读取字符数 n,可以有效防止缓冲区溢出,这是许多其他输入函数(如 gets())所没有的重要安全特性。

使用示例

下面是一个使用 fgets() 从标准输入读取字符串的简单示例:

#include <stdio.h>
#include <string.h>

#define MAX_LENGTH 100

int main() {
    char input[MAX_LENGTH];

    printf("请输入一行文本:\n");
    if (fgets(input, MAX_LENGTH, stdin) != NULL) {
        // 移除末尾的换行符(如果存在)
        input[strcspn(input, "\n")] = 0;
        printf("您输入的文本是:%s\n", input);
    } else {
        printf("读取输入时发生错误。\n");
    }

    return 0;
}

这个程序会提示用户输入一行文本,然后使用 fgets() 读取输入。之后,它会移除末尾的换行符(如果存在),并打印出用户输入的文本。


运行这个程序,可能会得到如下输出:

请输入一行文本:
Hello, fgets() function!
您输入的文本是:Hello, fgets() function!

注意事项

使用 fgets() 时,需要注意以下几点:

  1. 始终检查 fgets() 的返回值,以确保成功读取了输入。
  2. 记住 fgets() 会保留换行符,如果不需要,需要手动去除。
  3. 当从文件读取时,使用 while 循环和 fgets() 可以有效地逐行读取整个文件。
  4. 虽然 fgets() 比 gets() 安全,但仍然需要确保为输入分配足够的缓冲区空间。

声明:《C语言系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。