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 :

fprintf arguments


Sujet :

C

  1. #1
    Futur Membre du Club
    Inscrit en
    Mai 2005
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 4
    Par défaut fprintf arguments
    Bonjour,

    J'aimerais creer une fonction qui aurait le meme prototype que fprintf.
    Pour être plus précise je voudrais pouvoir appeler à la place de fprintf une fonction que j'aurais creer.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void mafonction(FILE *f, char* texte, ...)
    et cette fonction en appellerait une autre qui me permettrait de mettre un certain nombre (variable) de tabulation dans mon fichier puis appelerais la fonction fprintf pour mettre mon textedans ce fichier.
    En gros cette fonction serait une encapsulation pour fprintf, ce qui permettrait de rendre plus lisible mon code car je fais énormément de fprintf avec ajout de tabulation devant et une macro n'est pas possible car le fichier de destination change de nom.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void mafonction(FILE *f, char* texte, ...){
    ajoutetabulation(f);
    fprintf(f,texte,...);
    }
    Est-ce que c'est possible, si oui comment car les arguments ... me gène et je ne sais pas comment m'en sortir.
    Merci de votre aide.
    Nadège

  2. #2
    Membre Expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 869
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 869
    Par défaut
    Le bout de code que tu montres est bien, sauf qu'il faut aussi passer un pointeur à ta fonction:
    Car sinon les modifications ne seraient pas prisent en compte ( elles se feraient sur une copie de l'argument, et non sur la valeur de l'argument lui même )

    Quel est le problème que tu rencontres ?

  3. #3
    Membre chevronné
    Avatar de bigquick
    Profil pro
    Inscrit en
    Août 2002
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 356
    Par défaut
    Salut,

    Il me semble bien que tu ne peux pas transmettre les arguments variables sous forme de "..."

    Deux solutions s'offrent à toi:

    * Les transmettre sous forme de va_list: http://www.developpez.net/forums/vie...ghlight=stdarg
    (en fait, je ne pense pas que ca s'adapte à ton cas, puisque fprintf n'accpetera pas un va_list en parametre)

    * Les traiter dans ta fonction (avant l'appel à printf) avec les macros va_arg, ce qui te donne une chaine de caractère, que tu pourras ensuite passer à fprintf comme une chaine classique

    Qu'ne penses-tu ?

  4. #4
    Futur Membre du Club
    Inscrit en
    Mai 2005
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 4
    Par défaut
    Bah le problème est du au ... dans l'appel à fprintf il me met syntax et missing argument et je ne sais pas par quoi remplacer ces ...

  5. #5
    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 : 41
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par défaut
    Bonjour,
    Citation Envoyé par bigquick
    * Les transmettre sous forme de va_list: http://www.developpez.net/forums/vie...ghlight=stdarg
    (en fait, je ne pense pas que ca s'adapte à ton cas, puisque fprintf n'accpetera pas un va_list en parametre)
    Voici un cousin de fprintf :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int vfprintf(FILE* stream, const char* format, va_list arg);
        Equivalent to fprintf with variable argument list replaced by arg, which must have been initialised by the va_start macro (and may have been used in calls to va_arg).

  6. #6
    Membre chevronné
    Avatar de bigquick
    Profil pro
    Inscrit en
    Août 2002
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 356
    Par défaut
    Ah bah qui l'eut cru ?
    Tout est bien qui finit bien alors

  7. #7
    Futur Membre du Club
    Inscrit en
    Mai 2005
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 4
    Par défaut
    Bah pour va_list j'ai du mal à comprendre, par macro ça serait bien mais peut-on changer la valeur d'une macro au fur à mesure dans un code c ? ou je suis obliger d'en creer plusieur ? car si c'est cas, ça va vite redevenir illisible.

    En tout cas merci de votre iade à tous les deux

  8. #8
    Membre chevronné
    Avatar de bigquick
    Profil pro
    Inscrit en
    Août 2002
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 356
    Par défaut
    Pour exploiter les arguments en nombre variable, tu disposes, dans <stdarg.h>, de plusieurs macros:
    va_arg, va_list, va_start, va_end

    Celles-ci te permettent de parcourir tous les argeuments passés à ta fonction. Tu peux trouver un exemple d'utilisation ici

  9. #9
    Futur Membre du Club
    Inscrit en
    Mai 2005
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 4
    Par défaut
    Ah d'accord merci beaucoup, je vais utiliser tout ça.
    Encore merci à vous tous

  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
    Prend garde tout de même à donner à va_arg le type exacte de chaque données sous peine d'un comportement indéterminé car cette macro ne connais pas le type de tes arguments variables !
    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 chevronné
    Avatar de bigquick
    Profil pro
    Inscrit en
    Août 2002
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 356
    Par défaut
    C'est vrai, attention !

    C'est pour ça que si ton but est de réaliser quelquechose comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maFonction("%d_%f_%s",10,56.2,"test");
    Le plus simple est peut etre d'utiliser la 2ème solution:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    char chaine[1024];
     
    va_list body;
    va_start(body, fmt);
    vsprintf(chaine, fmt, body);
    va_end(body);
     
    // maintenant "chaine" contient toute ta chaine
    //et tu peux lui ajouter des trusc devant, derrière, et enfin l'écrire dans un fichier
    Voilà

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Arguments pour et contre Access ?
    Par bottura dans le forum Sondages et Débats
    Réponses: 240
    Dernier message: 23/03/2018, 23h25
  2. Réponses: 3
    Dernier message: 07/04/2003, 20h06
  3. Récuperer Arguments sur la ligne de commande ?
    Par Muetdhiver dans le forum x86 16-bits
    Réponses: 9
    Dernier message: 20/01/2003, 21h01
  4. fonction renvoyant un tableau en argument
    Par Jones dans le forum Langage
    Réponses: 6
    Dernier message: 30/09/2002, 18h20
  5. Procédure avec un nombre variable d'arguments
    Par charly dans le forum Langage
    Réponses: 15
    Dernier message: 21/06/2002, 11h08

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