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

Foi-me dito que o scanf não deve ser usado quando o usuário insere uma string. Em vez disso, vá para gets () pela maioria dos especialistas e também pelos usuários do StackOverflow. Eu nunca perguntei no StackOverflow por que não se deve usar o scanf over gets para strings. Esta não é a pergunta real, mas a resposta a esta pergunta é muito apreciada.

Agora, vamos à pergunta real. Me deparei com esse tipo de código -

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

Isto lê uma string até que o usuário insira um novo caractere de linha, considerando os espaços em branco também como strin

Existe algum problema se eu usar

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

em vez de recebe?

@Is fica mais otimizado do que a função scanf, por mais que pareça, o gets é puramente dedicado a lidar com strings. Por favor, deixe-me saber sobre isso.

Atualiza

Est link @ me ajudou a entender melho

questionAnswers(2)

yourAnswerToTheQuestion