可能重复:
getc Vs getchar Vs Scanf for reading a character from stdin
我知道 getchar 是宏,从stdin获取字符作为输入。其中 scanf 是一个 从stdin获取任何数据类型作为输入。
由于 getchar 是一个宏,这就是为什么它有助于程序运行得更快,但尽管如此,建议使用scanf代替getchar 即可。的 WHY吗
我在网上了解到,与getchar相比,scanf是安全的,所以,是什么让scanf安全?
答案 0 :(得分:1)
我认为两者都可以像你制作一样安全或不安全,但最后我会决定使用scanf()
:
由于每次调用都会处理多个字符,因此scanf()
可能更快。
其行为已有详细记录,这意味着有完善的方法可以避免安全问题,例如在格式字符串中包含硬编码长度限制,当然也不会使用从用户输入生成的格式字符串
scanf()
更容易使用 - getchar()
可能“更安全”,但 必须在其周围编写大量代码从中获取一些实际功能。代码将复制scanf()
提供的功能,然后必须检查其是否存在安全隐患。 scanf()
实现可能会进行广泛的同行评审,这可能是您自己的代码可能永远不会出现的。
使用标准函数(例如scanf()
)的代码比基于自定义库的任何代码都容易维护,尤其是在具有大量人员流动的编程团队中。
答案 1 :(得分:0)
scanf
速度更快,因为它可以同时读取多个字符。
但是,getchar
更安全,因为它一次只能读取一个字符。如果未选中输入,则使用scanf
的{{3}}程序。
答案 2 :(得分:-1)
getChar()是一个函数,我所知道的和我读过的内容,虽然它被某些网站称为宏,但它在官方 C++ Reference website.
当你需要从键盘输入一个且只有一个字符时,使用getchar(),其中scanf()用于获取多个字符。哪一个比其他更快取决于您的要求和实施。
就安全性和易用性而言,我会投票给scanf(),因为我可以输入多个字符,而且在使用scanf()之后我不必使用flush()使用getchar()时必须使用。