C 语言 fgets() 函数

2024 年 8 月 28 日 | 3 分钟阅读

在 C 编程中,处理 **输入** 和 **输出** 活动至关重要。**Fgets()** 是众多可用于 **输入** 的函数之一。借助此强大的函数,开发人员可以安全且精确地从给定流中读取信息。在本文中,我们将探讨 **fgets()** 的 **方方面面**,包括其 **语法、应用、示例代码** 和 **预期结果**。

**fgets() 函数**,即 **“file get string”** 的缩写,通常用于从文件流或 **标准输入 (stdin)** 读取字符串。它提供了比已弃用的 **gets() 函数** 更安全的选择,后者以前被使用但现在存在安全隐患。 **fgets()** 函数提供了一种限制读取字符数的方法,并能有效处理换行符。

fgets() 的语法如下

参数分解如下

**str:** 这是指向将用于存储输入的字符数组(字符串)的引用。

**size:** 可以读取的总字符数(包括 **空字符 "0"**)。

**stream:** 指向 fgets() 将从中读取的输入文件流或 **stdin** 的指针。

为了更好地理解 fgets() 的工作原理,让我们来看一个示例

示例

输出

Enter a string: Hello, World!
You entered: Hello, World!
Enter a string: This is a very long string that exceeds the limit of the input buffer.
You entered: This is a very long string that exceeds the limit of the input buffer.
If a user types an empty text by simply pressing the Enter key:
Enter a string:
You entered:

说明

在上面的示例中,我们首先包含适当的头文件 **“stdio.h”**。然后,输入字符串被定义为一个大小为 100 的字符数组 input。

程序使用 **printf() 函数** 要求用户输入一个字符串。之后,使用 **stdin** 作为 **输入流**,并使用 input 作为目标字符串,**sizeof(input)** 作为最大读取大小来调用 **fgets()**。然后,程序使用 **printf()** 输出输入的字符串。

**Fgets()** 函数可以在换行符 **'n'** 出现在达到最大大小时 **读取** 并 **保存** 它。这使得能够区分输入行是否已完全读取或由于空间限制而被截断。

示例

使用修改后的代码片段,您可以使用 **strcspn() 方法** 从输入字符串中 **删除** **换行符**。

输出

Enter a string: Hello World
You entered: Hello World

说明

**strcspn() 函数** 确定由不在给定字符集中的字符组成的子字符串的长度。在此实例中,在指定 **"n"** 作为要搜索的字符集后,使用 **空字符 "0"** 替换换行符。

结论

总之,使用 C **fgets() 方法** 从文件流或标准输入读取 **输入字符串** 是可靠且安全的。它允许您为输入选择最大大小并处理换行符,是一个在受控方式下处理用户输入的有用工具。

已弃用的 **gets() 函数** 被更安全的 **fgets() 函数** 取代,后者修复了由 **缓冲区溢出** 引起的可bào性安全问题。它确保输入字符串不会超出允许的范围,从而避免潜在的内存损坏问题。

提供的示例代码展示了如何正确使用 **fgets()** 来捕获用户输入并在出现换行符时将其删除。它强调了考虑输入限制和处理换行符对于确保准确的字符串处理至关重要。

开发人员可以通过 **fgets()** 提高其 C 程序的安全性。通过为输入定义最大大小,他们可以避免意外行为和由过大输入引起的可bào性安全漏洞。

有志于 C 编程的开发人员应熟悉 **fgets()** 及其使用说明,以确保安全有效的输入处理。了解此函数的开发人员可以创建更可靠、更安全的软件,从而抵御常见且容易被利用的与输入相关的漏洞。