
		paulo1205
		
		(usa Ubuntu)
		
		Enviado em 27/07/2015 - 08:51h 
		Eu falei em termos de se fazer um bom uso das funções.  Sendo mais específico, ambas permitem modificar dados na memória em posições arbitrárias, dadas pelo usuário.  Caso o usuário cometa um erro a respeito do endereço ou da quantidade de posições consecutivas da memória que podem ou que serão usadas na hora de pôr os dados, a integridade do programa pode ser comprometida.
Mas eu não creio que se possa dizer que isso caracteriza uma falha de segurança das funções.  É uma característica da linguagem C requerer do usuário trabalhar com ponteiros e ser explícito sobre endereços de início e quantidade de elementos.
Tanto 
fgets() quando as funções da família de 
scanf() oferecem mecanismos para limitar a quantidade de caracteres lidos para dentro de um string.  Se o programador os usa mal (ou não os usa, no cado da família de 
scanf()), não é por falha de projeto das funções, mas por erro cometido pelo programador.
Isso é bem diferente da falha da (agora finalmente falecida) 
gets().  Essa, sim, tinha uma falha de projeto: o usuário simplesmente não tinha como impor um limite à quantidade de caracteres lidos por essa função.