scanf (“% [^ \ n] s”, a) vs gets (a)

Me han dicho que scanf no debe usarse mientras el usuario ingresa una cadena. En su lugar, vaya por gets () por la mayoría de los expertos y también por los usuarios de StackOverflow. Nunca pregunté en StackOverflow por qué uno no debería usar scanf over gets para cadenas. Esta no es la pregunta real, pero la respuesta a esta pregunta es muy apreciada.

Ahora llegando a la pregunta real. Me encontré con este tipo de código:

scanf("%[^\n]s",a); 

Esto lee una cadena hasta que el usuario ingresa un nuevo carácter de línea, considerando los espacios en blanco también como cadena.

¿Hay algún problema si uso

scanf("%[^\n]s",a);

en lugar de consigue?

Is se optimiza más que la función scanf como suena, gets está puramente dedicado a manejar cadenas. Por favor, hágamelo saber acerca de esto.

Actualiza

Est link me ayudó a entenderlo mejor.

Respuestas a la pregunta(2)

Su respuesta a la pregunta