C编程中的gets vs scanf vs fgets之间的区别


Difference between gets vs scanf vs fgets in C programming

本问题已经有最佳答案,请猛点这里访问。

我最近开始学习C编程语言,并在3本书中看到了这三个输入函数。 因此,在考虑效率时,我几乎不会混淆使用哪一个。


So I'm little confused about which one to use when efficiency is considered.

没有一个I / O速度很慢。如果您需要效率,请不要执行I / O。或者,更有可能的是您实际上并不需要效率,而是需要I / O,并且过早地进行了优化。

除此之外,这是区别:

  • gets()是危险的,已从标准中删除,请不要使用它。

  • scanf()是标准配置,但笨拙且难以正确使用。除了非常专业的用例之外,它也不值得打扰。

  • fgets()更易于正确使用,它是获取原始的不受信任的用户输入(即一般而言,用户输入)的首选方法。它也可以从任何FILE *流中读取,而不仅仅是stdin


gets()始终从标准输入(stdin)读取

fgets()可以从输入流中读取(例如,您明确打开的文件)

因此,gets()等于fgets(),第三个参数为stdin

最后,scanf()可以读取格式化的输入数据,对其进行解析并为您提供的指针设置值。

切勿使用gets()。它没有针对缓冲区溢出漏洞的保护措施。

避免使用scanf()。如果使用不当,它可能会出现与gets()相同的缓冲区溢出问题。

尽管有时很不方便,但您应该使用fgets()