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.