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 :

Pourquoi le scanf doit être interdit


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de gnto
    Homme Profil pro
    Ingénieur système logiciel
    Inscrit en
    Janvier 2006
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur système logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2006
    Messages : 923
    Par défaut Pourquoi le scanf doit être interdit
    Bonjour,

    Ca fais plusieurs fois que je vois que la fonction scanf est dangereuse ! Alors j'ai pris la peine de regarder le man.

    La conversion %s devrait toujours être accompagnée d'une longueur maximale de chaîne de caractères. En effet, il existe un risque de débordement de buffer, qui peut conduire à un trou de sécurité important dans un programme Set-UID ou Set-GID.
    Est-elle dangeureuse avec une limitation de la longueur ? et un "%20s" limite-t'il la chaine a 20 caractères ?

    Merci d'avance.

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Même avec une limite, elle reste mal employée, car le buffer clavier n'est pas purifié.
    Il y a sur le site un tutoriel scanf() qui permet de purifier le buffer clavier avec juste un scanf() et un getchar()...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par défaut
    Le problème de scanf c'est qu'elle est souvent utilisée par des débutants mais cette fonction n'est pas simple à utiliser : Scanf démythifiée.

    En plus la saisie utilisateur est tout sauf formatée. Par contre dans le cas d'un fichier ça peut être pratique.

  4. #4
    Membre Expert Avatar de gnto
    Homme Profil pro
    Ingénieur système logiciel
    Inscrit en
    Janvier 2006
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur système logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2006
    Messages : 923
    Par défaut
    Ok, merci beacoup

  5. #5
    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 gnto
    Est-elle dangeureuse avec une limitation de la longueur ?
    Si le sujet est maitrisé, non.
    et un "%20s" limite-t'il la chaine a 20 caractères ?
    Non, à 20 + le 0. Il faut donc un tableau de 21 char. C'est horrible à maintenir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
       char line[21];
     
       scanf ("%20s", line);
    Alors que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
       char line[21];
       fgets(line, sizeof line, stdin);
    est clair est net.
    Pour être propre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
       char line[21];
       fgets(line, sizeof line, stdin);
       clean(line, stdin);
    avec (à mettre une fois pour toutes en bibliothèque e retirant les 'static', bien sûr...)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    static void purge (FILE * fp)
    {
       int c;
       while ((c = fgetc (fp)) != '\n' && c != EOF)
       {
       }
    }
     
    static void clean (char *s, FILE * fp)
    {
       /* search ... */
       char *p = strchr (s, '\n');  /* <string.h> */
       if (p != NULL)
       {
          /* ... and kill */
          *p = 0;
       }
       else
       {
          purge (fp);
       }
    }

Discussions similaires

  1. Réponses: 1
    Dernier message: 18/05/2006, 14h09
  2. [WebForms]A quel endroit doit-être présent le framework ?
    Par HULK dans le forum Général Dotnet
    Réponses: 2
    Dernier message: 13/04/2006, 14h59
  3. [Client/Serveur]Où doit être mis outil mesure Performances?
    Par sabure dans le forum Décisions SGBD
    Réponses: 4
    Dernier message: 06/03/2006, 23h52
  4. Réponses: 4
    Dernier message: 24/02/2006, 11h50
  5. dans un CSS que le texte doit être souligé?
    Par hstlaurent dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 01/09/2005, 16h06

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