Scanf和fgets

Anonim

Scanf vs fgets

Scanf和fgets是C编程中常用的两个功能短语,并且已经在其他编程语言中实现。 Scanf是指扫描格式。 Scanf关注有效令牌的输入,并根据指定的格式对其进行解析。专注于他们在执行方面的差异以及他们所持有的代码有助于整个过程的整体实施,这是一种深入了解两者之间差异的好方法。另一方面,Fgets是C库的一个功能,它从一开始就已经传播到其他库中。

在现代编程中不鼓励使用fgets,因为它保留在允许向后兼容的C89和C99标准中。即便如此,应该很好地解决fgets的使用问题,以确保整体结果是可以运行的代码。因此,使用fgets的程序员必须知道允许足够缓冲所需的字符数的最大上限。这是一项艰难的挑战,没有先前的数据知识。正是从这种设计中,在缓冲区溢出的情况下提供了允许利用计算机安全性的门。由于上述原因,建议不要使用拖把新程序来使用fgets。

scanf函数返回匹配的所有可用项。重要的是要注意,并非所有时间都能获得所需的相同数量的项目。这些项目可能少于要求的项目。如果流被耗尽,则给出EOF错误。在完成任何项目的匹配之前读取失败时也会看到相同的情况。然后,scanf函数返回成功匹配项的总数,其中的项可能少于请求的数。

在fgets和scanf之间看到另一个区别,包括fgets从给定文件读取的可能性,前提是它是打开的。 Scanf仅从标准输入读取,而不是任何文件。同样重要的是要注意fgets只在给定时间从文件中读取一行文本。另一方面,Scanf可以一次读取一行文本,但它也允许将句柄转换为数字类型,来自字符串类型。在大多数情况下,Fgets用于读取给定的数据行,而scanf用于解析数据。

另一个区别是scanf不执行边界检查,而fgets提供了一个更好的选择,可以进行评估。然后,可以使用Scanf在fgets检查后评估边界。

另一个需要注意的重要事项是scanf查找在特定输入的format参数中定义的特定模式。此输入称为stdin。在这种情况下,给定的输入可以是字符串文件,具体取决于使用的变体。另一方面,Fgets专门从文件中读取一行并将其复制到缓冲区的输出。通常,可以说scanf对默认使用中可以读取的特定字符数没有任何限制。 Fgets具有可以读取的最大字符数。

摘要

Scanf是指扫描格式。 Scanf专注于有效令牌的输入。 Scanf根据指定的格式解析输入。 Fgets是C的函数。 Scanf仅从标准输入读取。 Fgets仅在给定时间从文件中读取一行文本。 Scanf不执行边界检查。