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 :

Différence printf() et fprintf()


Sujet :

C

  1. #1
    Membre chevronné Avatar de cmoibal
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    361
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Avril 2007
    Messages : 361
    Par défaut Différence printf() et fprintf()
    Bonjour tt le monde,

    Je veux savoir c'est la quoi la difference entre l'utilisation de printf et fprintf dans un programme C.

    D'aprés mes tests, la seule difference qui j'ai detecté, c'est au moment de la redirection shell.

    posant l'exemple du programmme suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    int main(voi) {
     
    printf("Test avec printf");
     
    fprintf(stdout, "test avec fprintf(stdout,)");
     
    fprintf(stderr, "test avec fprintf(stderr,)");
     
    return 0;
    }
    On execute le binaire par la commande suivante :
    #> a.out > test.log
    alors le resultat affiche
    test avec fprintf(stdout,)
    test avec fprintf(stderr,)
    dans le fichier il y a :
    Test avec printf
    donc, fprintf() force le programme a utiliser le fichier de sortie specifié, et printf utilise le fichier déja specifié dans le shell. Est ce que c'est la seule difference ?

    MERCI

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 391
    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 391
    Par défaut
    Normalement, printf() et fprintf(stdout) devraient donner la même chose.

    Par contre, stderr est un tout autre flux, et les deux peuvent être redirigés séparément.
    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
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    C'est curieux.
    D'après la norme n1256 :
    7.19.6.3 The printf function
    Synopsis
    1 #include <stdio.h>
    int printf(const char * restrict format, ...);
    Description
    2 The printf function is equivalent to fprintf with the argument stdout interposed before the arguments to printf.

  4. #4
    Membre chevronné Avatar de cmoibal
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    361
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Avril 2007
    Messages : 361
    Par défaut
    oui oui désolé, les deux fonction fprintf(stdout,) et printf(), ont le même fonctionnement, j'ai juste oublié de changer le stdout dans le programme.

    encore désolé.

    Mais, c'est quoi la difference majeur entre les deux, a part la possiblité de specifier le flux de sortie ?

    MERCI

  5. #5
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 391
    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 391
    Par défaut
    Il me semble qu'il n'y a aucune autre différence.
    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.

  6. #6
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    La norme dit clairement qu'il n'y a pas de différence entre printf(....) et fprintf(stdout,....)

  7. #7
    Membre chevronné Avatar de cmoibal
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    361
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Avril 2007
    Messages : 361
    Par défaut
    MERCI, c'est trés claire
    donc j'ai un problème avec les MACRO que j'utilise :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    #ifdef DEBUG_CONSOLE
    #define LOG_START()
    #define LOG(mesg, args...)  fprintf(stdout, "[MY_PROJET] " mesg "\n", ##args)
    #define LOG_END()
    #endif
    quand je fait la redirection au niveau shell, rien n'est ajouté dans le fichier ???? pourquoi ?

  8. #8
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 391
    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 391
    Par défaut
    Je ne suis pas sûr que le shell accepte la redirection si le ">" n'est pas collé au nom de fichier...

    Si la redirection passe, normalement rien ne s'affiche sur la console...
    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.

  9. #9
    Membre éprouvé Avatar de yakamoneye
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 108
    Par défaut
    DESCRIPTION
    Les fonctions de la famille printf() produisent des sorties en accord avec le format décrit plus bas. Les fonctions printf() et
    vprintf() écrivent leur sortie sur stdout, le flux de sortie standard. fprintf() et vfprintf() écrivent sur le flux stream indiqué.
    sprintf(), snprintf(), vsprintf() et vsnprintf() écrivent leurs sorties dans la chaîne de caractères str.

Discussions similaires

  1. printf et fprintf.
    Par doudounico dans le forum C
    Réponses: 14
    Dernier message: 06/01/2010, 21h16
  2. Redefinition de printf en fprintf
    Par iza76 dans le forum C
    Réponses: 4
    Dernier message: 13/03/2008, 17h35
  3. différence entre Perror et fprintf(stderr,
    Par remi77 dans le forum C
    Réponses: 5
    Dernier message: 28/10/2006, 21h26
  4. histoire d'affichage printf fprintf
    Par gnto dans le forum C
    Réponses: 4
    Dernier message: 01/06/2006, 09h20
  5. Différence printf et sprintf
    Par alison239 dans le forum C
    Réponses: 2
    Dernier message: 11/05/2006, 10h41

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