Pular para o conteúdo

O uso do gets() para ler nome!

Dica publicada em C/C++ / Metodologias
Helton Barbosa Santos Ferreira HeltonBarbosa
Hits: 11.464 Categoria: C/C++ Subcategoria: Metodologias
  • Indicar
  • Impressora
  • Denunciar

O uso do gets() para ler nome!

Dica simples explicando por que não é bom usar o gets() nos seus códigos para ler nome, quando estiver programando em ambiente Unix.

Com certeza você já usou o gets() em algum código. Mas quando você compila, gera um aviso comunicando que não é bom usar o gets(). Para não causar esse problema, utilize uma função simples para ler caractere por caractere do nome digitado.

Tem um script feito por mim para auxiliar nesse sentido. O nome do script é função para ler nome. Use-o e tenha tranquilidade em seus códigos.

Nenhuma dica encontrada.

Aprendendo a Aprender - Curso Grátis

Como usar Dev-C/C++ no Windows 8

Acessando um valor dada sua posição numa matriz bidimensional

Compilando .EXEs no Linux (C/C++)

Livro de programação de jogos Linux de graça

#1 Comentário enviado por covoes em 26/06/2006 - 22:47h
o seu script eh tão inseguro quanto a função gets.
o problema é que você não controla o tamanho máximo lido para a string..por exemplo..se no seu script eu entrar com 100 'a' ele vai dar segmentation fault porque você está mandando gravar em um espaço não alocado da memória..
para evitar esses problemas utilize a função fgets..
#2 Comentário enviado por lazaro91 em 02/12/2007 - 23:08h
kra mas a função fgets lê do teclado?
#3 Comentário enviado por hunz em 02/05/2008 - 22:19h
para ler da entrada padrão (teclado) é usada a stream stdin, por exemplo:

fgets(nome, 100, stdin);

assim evita segmentation fault por estouro de memória, bem melhor do que o "gets" que acha que pode tudo. :P

lembrando que o fgets vai pegar o '\n' final da string, então se você for trabalhar com a string e não quiser o \n pentelhando, faça uma verificação depois de ler com o fgets:

aux_len = strlen(nome);
if (nome[aux_len - 1] == '\n')
nome[aux_len - 1] = '\0';


espero ter ajudado, abraços
#4 Comentário enviado por EnzoFerber em 28/12/2008 - 22:05h
__fpurge (stdin);
scanf ( "%[^\n]", string);

Não precisa complicar...

#5 Comentário enviado por EnzoFerber em 05/01/2009 - 10:50h
Mais uma coisa,

Se quiser limitar o tanto de caracteres que scanf() vai ler:

__fpurge(stdin);
scanf( "% 255 [^\n]", string);

Agora ela só irá ler os primeiro 255 caracteres, ou ate encontrar \n :)

Contribuir com comentário

Entre na sua conta para comentar.