dever user ou não o gets() ?

apenas a titulo de curiosidade...
estou a fazer um pequeno programa em c, o que fazer em alternativa ao gets()
isto tudo porque estando a funcionar como pretendido apresenta o seguinte warning:
"eLibrary.c:(.text+0x173): warning: the `gets' function is dangerous and should not be used."
 
Parece-me que não ajudaste muito. A função scanf também continua a ser insegura, podedendo levar a buffer overflows.

É mais seguro utilizar por exemplo a char *fgets(char *s, int size, FILE *stream);

Depende do que fizeres com o scanf.

Há muitas funções para ler streams, seja de ficheiros ou de teclado, etc.

É preciso é ver o que se quer e como se quer manipular.

Eu só dei uma sugestão, não era necessariamente a melhor, mais eficiente, mais segura, etc. ;)
 
o exemplo é +- o seguinte "rm -rf popo.mp3 garrafa.png..."
havendo com isto um numero variável de argumentos.
O scanf esta fora de questão (numero variável de argumentos, tentei com vscanf... mas lá está não sei a ordem também não dá. Tenho mesmo de ler a string toda e fazer o parser dela)

Segui o concelho do IcePick, usei #include <limits.h> e fgets (string, UCHAR_MAX , stdin);
Assim faz o mesmo que gets mas sem overflow e independente do Sistema Operativo.
Thanks!
 
o exemplo é +- o seguinte "rm -rf popo.mp3 garrafa.png..."
havendo com isto um numero variável de argumentos.
O scanf esta fora de questão (numero variável de argumentos, tentei com vscanf... mas lá está não sei a ordem também não dá. Tenho mesmo de ler a string toda e fazer o parser dela)

Segui o concelho do IcePick, usei #include <limits.h> e fgets (string, UCHAR_MAX , stdin);
Assim faz o mesmo que gets mas sem overflow e independente do Sistema Operativo.
Thanks!

Mas se isso vai ser passado na chamada do programa, então já vais receber esses argumentos todos num vector passado para o main!
Tipicamente:

int main(int argc, char *argv[])
 
desculpa a analogia ao rm. Realmente foi mal feita. O objectivo é ter já o program a correr quando se faz o comando:
tipo: ./programa
>rm -rf popo.mp3 garrafa.png...
tendo apenas o argc o valor 1.

Mas obrigado pela atenção
 
Por vezes a funçao gets() dá esse aviso:

Usem de preferencia a funçao fgets().
Fica aki o prototipo da funçao: char *fgets(char *s,int n , FILE *fich)
- "s" é a string onde é colocada a informaçao lida do ficheiro
- "n" é o numero de caracteres lidos por linha
- "fich" é o ficheiro de onde vais ler


Se quiseres ler do teclado podes do stdin, deixo aki um exemplo da funçao fgets para se ler do teclado como a funçao gets:

char nome[100];
fgets (nome, 50, stdin);

_____________________________

Já tinha sido respondido, mas nao reparei, de qualquer das maneiras deixo ficar para quem tiver duvidas
 
Última edição:
Back
Topo