1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

dever user ou não o gets() ?

Discussão em 'Programação' iniciada por danielabrantes, 11 de Novembro de 2007. (Respostas: 7; Visualizações: 1458)

  1. 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."
     
  2. xtr3me

    xtr3me Power Member

  3. IcePicK

    IcePicK Power Member

    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);
     
  4. xtr3me

    xtr3me Power Member

    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. ;)
     
  5. 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!
     
  6. Warrior

    Warrior Power Member

    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[])
     
  7. 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
     
  8. 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: 28 de Dezembro de 2007

Partilhar esta Página