为什么scanf比getchar更安全?

时间:2012-12-28 08:56:27

标签: c

  

可能重复:
  getc Vs getchar Vs Scanf for reading a character from stdin

我知道 getchar 从stdin获取字符作为输入。其中 scanf 一个 从stdin获取任何数据类型作为输入
由于 getchar 是一个宏,这就是为什么它有助于程序运行得更快,但尽管如此,建议使用scanf代替getchar 即可。的 WHY吗

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

3 个答案:

答案 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()时必须使用。