我知道getchar是一个宏,它将字符作为stdin 的输入。
其中,scanf是一个函数,可以将任何数据类型作为标准输入的输入。
因为getchar是一个宏,所以它有助于使程序运行得更快,但尽管如此,还是 建议使用 scanf 代替 getchar。为什么?
我在网上了解到,与 getchar 相比,scanf 是安全的,那么,是什么让 scanf 安全?
我知道getchar是一个宏,它将字符作为stdin 的输入。
其中,scanf是一个函数,可以将任何数据类型作为标准输入的输入。
因为getchar是一个宏,所以它有助于使程序运行得更快,但尽管如此,还是 建议使用 scanf 代替 getchar。为什么?
我在网上了解到,与 getchar 相比,scanf 是安全的,那么,是什么让 scanf 安全?
我会争辩说,两者都可以像您制作它们一样安全或不安全,但最终我会满足于使用scanf()
:
由于它在每次调用时处理多个字符,scanf()
因此可能更快。
它的行为是有据可查的,这意味着有完善的方法来避免安全问题,例如在格式字符串中包含硬编码长度限制,当然从不使用从用户输入生成的格式字符串。
scanf()
使用起来要容易得多 -getchar()
本身可能“更安全”,但是您必须围绕它编写大量代码才能从中获得一些实际功能。将复制由提供的功能的代码,scanf()
然后必须审查安全隐患。该scanf()
实现可能会经过广泛的同行评审,而您自己的代码可能永远不会。
使用标准函数的代码,例如scanf()
比任何基于自定义库的代码更容易维护,尤其是在人员流动较大的编程团队中。
scanf
速度更快,因为它可以一次读取多个字符。
但是,getchar
它更安全,因为它一次只能读取一个字符。如果不检查输入,则相对容易利用正在使用scanf
.
getChar() 是我所知道的和我所读到的函数,虽然它被一些网站称为宏,但在官方C++ 参考网站中明确称为函数。
当您需要从键盘输入一个且仅一个字符时使用 getchar() ,而 scanf() 用于获取多个字符。哪个比其他更快完全取决于您的要求和实施。
就安全性和易用性而言,我会投票给 scanf(),因为我可以输入多个字符,并且在使用 scanf() 后我不必使用 flush(),这在使用时有时会成为强制性的获取字符()。