2

可能重复:
getc Vs getchar Vs Scanf 用于从标准输入读取字符

我知道getchar是一个它将字符作为stdin 的输入。
其中,scanf一个函数可以将任何数据类型作为标准输入的输入。

因为getchar是一个宏,所以它有助于使程序运行得更快,但尽管如此,还是 建议使用 scanf 代替 getchar为什么?

我在网上了解到,与 getchar 相比,scanf 是安全的,那么,是什么让 scanf 安全

4

3 回答 3

1

我会争辩说,两者都可以像您制作它们一样安全或不安全,但最终我会满足于使用scanf()

  • 由于它在每次调用时处理多个字符,scanf()因此可能更快。

  • 它的行为是有据可查的,这意味着有完善的方法来避免安全问题,例如在格式字符串中包含硬编码长度限制,当然从不使用从用户输入生成的格式字符串。

  • scanf()使用起来要容易得多 -getchar()本身可能“更安全”,但是您必须围绕它编写大量代码才能从中获得一些实际功能。将复制由提供的功能的代码,scanf()然后必须审查安全隐患。该scanf()实现可能会经过广泛的同行评审,而您自己的代码可能永远不会。

  • 使用标准函数的代码,例如scanf()比任何基于自定义库的代码更容易维护,尤其是在人员流动较大的编程团队中。

于 2012-12-28T09:42:28.160 回答
0

scanf速度更快,因为它可以一次读取多个字符。

但是,getchar它更安全,因为它一次只能读取一个字符。如果不检查输入,则相对容易利用正在使用scanf.

于 2012-12-28T09:01:11.443 回答
-2

getChar() 是我所知道的和我所读到的函数,虽然它被一些网站称为宏,但在官方C++ 参考网站中明确称为函数。

当您需要从键盘输入一个且仅一个字符时使用 getchar() ,而 scanf() 用于获取多个字符。哪个比其他更快完全取决于您的要求和实施。

就安全性和易用性而言,我会投票给 scanf(),因为我可以输入多个字符,并且在使用 scanf() 后我不必使用 flush(),这在使用时有时会成为强制性的获取字符()。

于 2012-12-28T09:57:17.263 回答