Evitar estouros de buffer com get [duplicado]
Esta pergunta já tem uma resposta aqui:
Por que a função gets é tão perigosa que não deve ser usada? 11 respostasA declaração degets
é:
char * gets ( char * str );
Note oomissão flagrante de um tamanho máximo parastr.
cplusplus.com diz2:
Observe que get é bem diferente de fgets: não só usa stdin como fonte, mas também não inclui o caractere de nova linha final na string resultante e não permite especificar um tamanho máximo para str (o que pode levar a estouros de buffer)
E também:
A revisão mais recente do padrão C (2011) removeu definitivamente essa função de sua especificação. A função foi descontinuada em C ++ (a partir do padrão de 2011, que segue C99 + TC3).
Agora, é claro,fgets
é geralmente recomendado como substituição degets
, porque sua declaração se parece com isso:
char * fgets ( char * str, int num, FILE * stream );
istoFAZ pegue um parâmetro de tamanho. Isso torna muito mais seguro do quegets
.
Agora, já que não estou disposto a gastar dinheiro para baixar ou comprar oC11 standard
, alguém pode lançar alguma luz sobre o motivo da depreciaçãogets
e o que isso significa para o código futuro? Por que existia no mesmo lugar quandofgets
é mais seguro? E porque ésó agora sendo preterido?