Использование функции '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 ...

Ответы на вопрос(3)

Ваш ответ на вопрос