IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Probleme avec la fonction gets


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 16
    Par défaut Probleme avec la fonction gets
    Bonjour a tous,

    Voila je fais du C depuis peu et pour cela j'utilise code::blocks, jusque la pas trop de problem, mais je fais un programme ou j'utise la fonction gets et il me met une erreur, du a cette fonction :
    le code :
    gets (ZL);

    l'erreur:
    main.c:70: AVERTISSEMENT: the `gets' function is dangerous and should not be used.
    :: === Build finished: 1 errors, 0 warnings ===

    pourtant dans mon prog il a bien les bibliotheques #include <string.h>, <stdlib.h> et <stdio.h>.

    Pouvez vous m'expliquer pourquoi cette erreur apparait?

    Et en meme temps pouvez me dire aussi si pour utiliser la fonction "malloc", il faut une biliotheque particuliere.

    merci de votre aide

  2. #2
    Membre émérite Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Par défaut
    gets() ne peut pas vérifier que le buffer passé en paramètre est suffisamment grand pour recevoir la chaîne. Préférez fgets().
    Pour utiliser malloc(), il suffit d'inclure <stdlib.h>

  3. #3
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par stephl
    gets() ne peut pas vérifier que le buffer passé en paramètre est suffisamment grand pour recevoir la chaîne. Préférez fgets().
    Pour utiliser malloc(), il suffit d'inclure <stdlib.h>
    Oui, gets devrait être interdie d'utilisation !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  4. #4
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par figo7
    pourtant dans mon prog il a bien les bibliotheques #include <string.h>, <stdlib.h> et <stdio.h>.
    Attention, il s'agit de fichiers d'en-tête (header). Une bibliothèque c'est autre chose et ça concerne l'éditeur de liens (linker).

    http://emmanuel-delahaye.developpez....m#bibliotheque

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 16
    Par défaut
    salut stphl,

    j'ai utilise fgets, comme tu m'as conseillé, mais le probleme continue, ne serais pas un probleme interne a code::blocks???
    je ne sais pas si gets deverait etre interdit ou pas, en tout cas mon prof y tien j'ai l'impression, et comme a la fac on utilise visual studio gets ça ne pose pas de probleme.
    Mais chez moi et sur mon portable j'ai preferé code::blocks a visual studio.

    Alors que faire avez vous une idee

  6. #6
    Membre émérite Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Par défaut
    Voulez-vous dire que vous obtenez toujours cet avertissement avec fgets()???
    Je pense que même avec code::blocks, il doit y avoir moyen de désactiver ce warning. En outre, cela ne devrait pas empêcher la création de l'exécutable.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 16
    Par défaut
    Oui j'ai toujours une erreur


    voila erreur


    main.c:70: error: too few arguments to function ‘fgets’
    :: === Build finished: 1 errors, 2 warnings ===

  8. #8
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par figo7
    Oui j'ai toujours une erreur


    voila erreur


    main.c:70: error: too few arguments to function ‘fgets’
    :: === Build finished: 1 errors, 2 warnings ===
    Comment utilises-tu cette fonction ? Cette erreur signifie que tu ne passes pas assez d'arguments à la fonction !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char * fgets (char * s, int size, FILE * stream);
    Voir la page man: fgets
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  9. #9
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par figo7
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    main.c:70: error: too few arguments to function ‘fgets’
    :: === Build finished: 1 errors, 2 warnings ===
    Ben oui. Quand on te propose une fonction nouvelle, il faut lire sa doc...

    fgets() ne remplace pas gets() 'pin to pin'. Il y a deux paramètres de plus, il faut tester la présence du '\n', agir en conséquence... Les saisies en C, c'est assez complexe...

    http://emmanuel-delahaye.developpez.com/inputs.htm

    NOTA : Si on décide de traiter correctement les entrées, c'est du 100%. Pas question de laisser trainer un gets() ni un scanf() ni un getchar()...

  10. #10
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Heu non, ce n'est pas possible que l'utilisation de fgets produise un message du genre:
    main.c:70: AVERTISSEMENT: the `gets' function is dangerous and should not be used.
    :: === Build finished: 1 errors, 0 warnings ===
    Pour les saisies utilisateurs et les lectures ligne par ligne des fichier je n'utilise que cette fonction et n'ai jamais eu ce problème ! Au passage, Code::Blocks n'y est pour rien, ce n'est qu'un EDI, c'est le compilateur qui est en faute ... enfin en faute c'est un grand car c'est un warning et donc c'est plutôt un bienfaits !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  11. #11
    Membre émérite Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Par défaut
    Citation Envoyé par Franck.H
    Au passage, Code::Blocks n'y est pour rien, ce n'est qu'un EDI, c'est le compilateur qui est en faute ...
    Je le sais. Je voulais juste parler d'une sorte de case à cocher dans les menus de l'IDE qui demanderait au compilateur de ne pas générer ce warning.

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 16
    Par défaut
    J'ai ne peu pas creer d'executable avec cette erreur.

Discussions similaires

  1. probleme avec les fonction get et set
    Par Invité dans le forum Flex
    Réponses: 0
    Dernier message: 23/01/2008, 14h44
  2. Probleme avec la fonction rename()
    Par TheZenZen dans le forum C
    Réponses: 6
    Dernier message: 08/10/2005, 15h59
  3. [LG] Problème avec la Fonction ReadLn en fin de programme
    Par killermano dans le forum Langage
    Réponses: 6
    Dernier message: 23/07/2005, 15h16
  4. [LG]Probleme avec une fonction
    Par xavier1936 dans le forum Langage
    Réponses: 7
    Dernier message: 08/02/2005, 22h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo