почему scanf более безопасен, чем getchar?

Возможный Дубликат:
getc Против getchar Против Scanf для чтения характера от stdin

I know that getchar is a macro that takes character as an input from stdin .
where as scanf is a function that takes any data type as an input from stdin.

As getchar is a macro thats why it helps to make program run faster ,but inspite of this it is recommended to use scanf in place of getchar. WHY?

я узнал в сети, что scanf безопасен по сравнению с getchar, таким образом, , что делает scanf сейф ?

2
nl ja de
добавлено автор Mark Probst, источник
Я серьезно don' t рассматривают scanf как "безопасную" функцию. Это - что-то из интервью или некоторых такой? Написание собственных безопасных функций ввода isn' t совершенно легкий, но если бы вы делаете, getchar определенно был бы среди тех you' d использование [или fetgc (), который является тем, что getchar() заканчивает тем, что назвал в конечном счете].
добавлено автор Mats Petersson, источник
@iota - на самом деле я ожидал ответ, связанный с проблемами безопасности.. - исходный код
добавлено автор sourcecode, источник
но если вы принимаете целую линию от пользователя тогда в thet ситуации, которая является лучшей - getchar или scanf? - исходный код
добавлено автор sourcecode, источник

3 ответы

Я утверждал бы, что оба могут быть столь безопасными или небезопасными, как вы делаете их, но в конце я согласился бы на использование scanf() :

  • , Так как это обрабатывает больше чем один знак при каждом требовании, scanf() , является потенциально быстрее.

  • Его поведение хорошо зарегистрирован, что означает, что есть известные методы, чтобы избежать проблем безопасности, такой как включая трудно закодированные пределы длины в строке формата, и конечно никогда не использующий строки формата, произведенные от ввода данных пользователем.

  • scanf() намного легче использовать - getchar() может быть "более безопасным" самостоятельно, но вы будете , должны написать много кода вокруг этого, чтобы вытащить некоторую фактическую функциональность из него. Кодекс, который дублирует функциональность, обеспеченную scanf() , и должен будет тогда быть рассмотрен для последствий безопасности. scanf() внедрение, вероятно, будет рецензируемым экстенсивно, что-то, чем, вероятно, никогда не будет ваш собственный код.

  • Кодекс, используя стандартные функции, такие как scanf() намного легче поддержать, чем что-нибудь на основе таможенных библиотек, особенно в командах программистов со значительной текучестью кадров.

1
добавлено
@mvp: Я предполагаю в конце, он переходит к фактическому контексту. Например, вы доверяли бы кому-то, который не может использовать scanf() , когда они должны и правильным способом, чтобы написать их собственный код парсинга последовательности? Я видел, что отвратительные злодеяния передаются, в то время как использование getchar() , чтобы по существу перестроить колесо...
добавлено автор thkala, источник
Действительно плохой совет. Для любого, кто рассматривает, чтобы использовать scanf , пожалуйста, прочитайте это сначала: gidnetwork.com/b-59.html
добавлено автор mvp, источник

getChar() is a function as What I know and what I have read, Although it is termed as a macro by some of the websites but it is clearly termed as a function in the official C++ Reference website.

getchar() используется, когда вам нужен один и только один характер, который будет введен с клавиатуры, где как scanf() используется, чтобы получить многократные знаки. То, какой быстрее тогда другой, зависит полностью от вашего требования и внедрения.

До безопасности и простоты использования обеспокоен, что я отдал бы свой голос к scanf (), поскольку я могу ввести многократные знаки, и я не должен использовать поток() после использования scanf (), который иногда становится обязательным, используя getchar ().

1
добавлено

scanf is faster because it can read multiple characters at once.

Однако getchar более безопасен, потому что это может только прочитать один характер за один раз. Если введенный не проверяется, это относительно легкий эксплуатировать программа, которая использует scanf .

0
добавлено
Быстрее ли scanf, чем getchar, конечно, зависит от варианта использования и фактической реализации.
добавлено автор Mark Probst, источник