Использование функции 'scanf' (или fscanf и sscanf) в реальных приложениях обычно вообще не рекомендуется, потому что это небезопасно, и это обычно дыра для переполнения буфера, если будут предоставлены некоторые неверные входные данные. Есть много более безопасных способов ввода чисел во многих широко используемых библиотеках для C ++ (QT, библиотеки времени выполнения для Microsoft Visual C ++ и т. Д.). Вероятно, вы можете найти безопасные альтернативы для «чистого» языка Си.
eck показывает следующее предупреждение для scanf:
Message: scanf without field width limits can crash with huge input data. To fix this error message add a field width specifier: %s => %20s %i => %3i Sample program that can crash: #include int main() { int a; scanf("%i", &a); return 0; } To make it crash: perl -e 'print "5"x2100000' | ./a.out
Я не могу разбить эту программу, набрав "огромные входные данные". Что именно я должен напечатать, чтобы получить этот сбой? Я также не понимаю значение последней строки в этом предупреждении:
perl -e ...