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 :

snprintf comment cela fonctionne?


Sujet :

C

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2005
    Messages : 119
    Points : 106
    Points
    106
    Par défaut snprintf comment cela fonctionne?
    Bonjour à tous,

    Voila , j'ai vu dans un code récement ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for(i;i<16;i++){ 
                     snprintf(HEX_DATA+i*2,sizeof(HEX_DATA),"%02x",digest[i]); 
                     }
    HEX_DATA est une varaible de type const char. Je comprend que la boucle met le contenu de digest en hexa, mais je ne comprend absolument pas le fonctionnement de snprintf :s . J'ai regardez sur le net et on dit "tronque une new str de taille size (ici sizeof(HEX_DATA)). Qu'elle différence avec sprintf?

    Merci d'avance.

  2. #2
    Responsable technique

    Avatar de Anomaly
    Homme Profil pro
    Directeur
    Inscrit en
    Juin 2003
    Messages
    10 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Directeur
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 342
    Points : 130 320
    Points
    130 320
    Billets dans le blog
    1
    Par défaut
    sprintf() ne vérifie pas la taille de la variable destination (elle n'a aucun moyen pour la deviner), il y a donc un risque de buffer overflow. Avec snprintf(), tu indiques la taille de ta variable destination, si bien qu'il n'y a plus de risque de buffer overflow. Si ton résultat est trop grand, le contenu sera tronqué.

  3. #3
    Membre éprouvé Avatar de zooro
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 921
    Points : 1 260
    Points
    1 260
    Par défaut
    Citation Envoyé par deck_bsd
    Bonjour à tous,

    Voila , j'ai vu dans un code récement ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for(i;i<16;i++){ 
                     snprintf(HEX_DATA+i*2,sizeof(HEX_DATA),"%02x",digest[i]); 
                     }
    HEX_DATA est une varaible de type const char. Je comprend que la boucle met le contenu de digest en hexa, mais je ne comprend absolument pas le fonctionnement de snprintf :s . J'ai regardez sur le net et on dit "tronque une new str de taille size (ici sizeof(HEX_DATA)). Qu'elle différence avec sprintf?

    Merci d'avance.
    Bonjour,
    snprintf écrira au plus sizeof(HEX_DATA) caractères. Donc, si la taille est bien calculée, il n'y aura pas de débordement.
    sprintf, par contre, écrira la chaîne intégralement, qu'il y ait ou non de la place dans la chaîne de destination.

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Manque de pot, snprintf() n'est standard que depuis le C99, et Microsoft refuse de l'implémenter.
    Si tu veux reproduire le comportement de snprintf() sous Windows, il faut des fonctions de ce type:
    http://www.developpez.net/forums/sho...8&postcount=14

Discussions similaires

  1. client RMI comment cela fonctionne-t-il?
    Par manux53 dans le forum Langage
    Réponses: 10
    Dernier message: 21/04/2010, 15h39
  2. Comment cela fonctionne ?
    Par AuraHxC dans le forum Bibliographies - Index - Glossaires
    Réponses: 2
    Dernier message: 09/11/2009, 12h01
  3. ouinon comment cela fonctionne ?
    Par chapeau_melon dans le forum WinDev
    Réponses: 5
    Dernier message: 19/02/2008, 11h16
  4. [Berkley DB] Comment cela fonctionne ?
    Par saidus dans le forum Autres SGBD
    Réponses: 1
    Dernier message: 22/02/2006, 17h49
  5. [Caml] Du mal à comprendre comment cela fonctionne...
    Par Sir Caedes dans le forum Caml
    Réponses: 16
    Dernier message: 05/01/2006, 11h52

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