O uso do gets() para ler nome!

Publicado por Helton Barbosa Santos Ferreira em 26/06/2006

[ Hits: 10.030 ]

 


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.

Outras dicas deste autor
Nenhuma dica encontrada.
Leitura recomendada

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

Montando automaticamente o floppy e CDROM com AutoFS

Instalando o SolydXK

Open Drive (Cliente Google Drive)

Como instalar o driver proprietário da ATI no kernel 2.6.18

  

Comentários
[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] = '{COMENTARIO}';


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




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts