Curso de Programação C | Como ler uma String com a função gets()? | aula 130
HTML-код
- Опубликовано: 8 фев 2025
- Outra função muito simples para a leitura de strings a partir do teclado é a função gets(). Contudo, você deve evitar ao máximo utilizar esta função.
Sua utilização é bem simples, bastando passar como parâmetro o nome do vetor onde a string será salva, assim:
char palavras[100];
gets(palavras);
Contudo, esta função é insegura. Dependendo de qual compilador você esteja utilizando, ele emitirá uma mensagem de alerta, informando que a função é insegura e você não deveria utiliza-la.
Código disponível em: wagnergaspar.com/
ótimo vídeo.
fgets é diferente da gets ne ? gostaria de saber se ao usar fgets eu teria algum problema pra compilar meu programa e se é recomendado usado usar fgets ao inves da string ?
o que eu percebi ate no momento que tenho estudado , e que existem muitas controversas que acabam atrapalhando o aprendizado. No curso aprendi apenas usar a scanf e nunca meu professor mencionou que pra eu escrever varios nomes , teria que colocar uns detalhes . fiquei mais de 3 semanas no intervalo das aulas pesquisando e ai aprendi varias outras formas na internet. uma usa o gets , mais ele tem problemas , e até agora nao consegui criar uma funçao pra cadastrar cliente que de sempre certo. estes dias o nome ficou pela metade . os videos ajudam muito , mais tem hora que eles mesmos nos confundem.
e os meus que deram if e else,e depois foram para recursao,dps array,string e ponteriro,pulando for,while e etc,ai vc vai procurar video no youtube,a maioria em com esses recursos q eles n deram,minha turma ta tendo q se virar pra n se ferrar nesse conteudo kkkkkkk
a função é perigos, mas o quê acontece? por quê é perigosa?
O problema é semelhante ao uso do scanf sem indicar a quantidade máxima de caracteres. Contudo, enquanto o scanf permite contornar esse problema, a função gets não possui nenhuma forma adicional de proteção. Ao ler dados, esses dados vão inicialmente para um buffer e esse buffer possui um tamanho limitado que pode ser excedido ao usar gets.
O perigo reside no fato de que o estouro do buffer pode ser provocado e utilizado para propagação de ataques. Não sou especialista em segurança digital, mas encontrei uma informação interessante neste link: qastack.com.br/programming/1694036/why-is-the-gets-function-so-dangerous-that-it-should-not-be-used
Segundo o autor, "O primeiro worm da Internet (o Morris Internet Worm ) escapou cerca de 30 anos atrás (02/11/1988) e usou gets(), um estouro de buffer como um de seus métodos de propagação de um sistema para outro. O problema básico é que a função não sabe qual o tamanho do buffer, portanto continua lendo até encontrar uma nova linha ou encontrar um EOF (de End Of File - fim do arquivo) e pode exceder os limites do buffer que recebeu."
Gets foi oficialmente removido do padrão C em 2011, apenas continua funcionando, com avisos, por questão de compatibilidades com sistemas mais antigos.
Por causa da vulnerabilidade chamada "buffer overflow".
se não devemos usar então por que ensinou?kkk
Porque se eu não ensinasse provavelmente alguém perguntaria por ela rsrsrs.
Há muito material desatualizado na internet com ela.
1 - Pra conhecimento, a gente precisa entender o passado pra construir o futuro.
2 - Para segurança, pode não ser mais o caso do gets pq o C99 não oferece mais suporte, mas imagine que você se depare com isso num código que esta lendo... de um colega de equipe...Nunca subestime o conhecimento, seja lá como ele apareça.
@@BreachBusters falou tudo.
@@BreachBusters Obg por esclarecer, meu clang não tava aceitando o gets