Из документации C :.
Функция gets () не выполняет проверку границ, поэтому эта функция чрезвычайно уязвима для атак переполнения буфера.Его нельзя безопасно использовать (если только программа не работает в среде, которая ограничивает то, что может появиться в stdin).По этой причине эта функция устарела в третьем исправлении к стандарту C99 и вообще удалена в стандарте C11 .fgets () и gets_s () являются рекомендуемыми заменами.
Никогда не используйте gets ().