Mi terminal de Ubuntu sigue diciéndome que evite usar la función gets (); porque está en desuso y es peligroso. ¿Porque?

En cuanto al problema de lanzar una advertencia de desaprobación de una API (suponiendo que esté utilizando la referencia a la instalación en una sola PC) depende de la opción predeterminada para GCC.

Por ejemplo: la configuración de advertencia predeterminada de GCC se muestra mediante el siguiente comando

$ gcc -Q –help = advertencias | grep en desuso
-Wdeprecated [habilitado]
-Wdeprecated-declaraciones [habilitado]

Aquí muestra que las advertencias de desactivación están habilitadas de forma predeterminada para este gcc.
Otro ejemplo sería:

$ gcc -Q –help = advertencias | grep sin usar
-Wunused [deshabilitado]
-Wunused-but-set-parameter [deshabilitado]
-Wunused-but-set-variable [deshabilitado]
-Wonused-dummy-argumento
-Wunused-function [deshabilitado]
-Wunused-label [deshabilitado]
-Wunused-local-typedefs [deshabilitado]
-Wunused-macros [deshabilitado]
-Parámetro sin usar [deshabilitado]
-Wunused-result [habilitado]
-Wunused-value [deshabilitado]
-Wunused-variable [deshabilitado]

si desea deshabilitar selectivamente la advertencia (es decir, si elige usar la API en desuso, sacrificando posiblemente la estabilidad y la seguridad de su código), puede usar la opción “-Wxxx” mientras invoca GCC (Uso de la Colección del compilador GNU (GCC)) o inclúyalos en su Makefile bajo CFLAGS. Por ejemplo:

CFLAGS = -Wno-deprecated -Wno-deprecated-declaraciones

Del manual de la biblioteca GNU C (que es lo que está instalado en su sistema)

“La función gets es muy peligrosa porque no proporciona protección contra el desbordamiento de la cadena s”.

Esto significa que si la cadena leída por el usuario es más larga que la memoria asignada para contener esa cadena ‘s’, intentaría escribir más allá de esa memoria, lo que probablemente provocaría el bloqueo de su programa debido a un error de segmentación (ya que está utilizando almacenamiento no asignado al proceso).