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 :

Fonction printf personnalisee


Sujet :

C

  1. #1
    Bob
    Bob est déconnecté
    Membre averti
    Avatar de Bob
    Inscrit en
    Mars 2002
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 115
    Points : 378
    Points
    378
    Par défaut Fonction printf personnalisee
    Voila le pb, je voudrais faire une fonction printf personnalisee. En fait je voudrais utiliser la fonction printf existante mais retraiter la chaine renvoyee par printf. Les raisons pour lesquelles j'ai besoin de cette fonction sont longues a expliquer...
    Cette methode marche :
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    int __cdecl myprintf(char *buf,char *chaine,...)
    {
    	va_list pa;
     
    	int i,nargs,arg,re;
    	nargs=0;
    	i=0;
    	do
    	{
    		if(chaine[i]=='%')
    		{
    			++i;
    			if(chaine[i]!='%')
    				++nargs;
    			else
    			{
    				if(chaine[i]==0)
    					break;
    				++i;
    			}
    		}
    		else
    			++i;
    	}while(chaine[i]!=0);
     
    	DWORD *args;
    	args=new DWORD[nargs];
     
    	va_start(pa,chaine);
    	for(i=0;i<nargs;++i)
    	{
    		args[i]=va_arg(pa,DWORD);
    	}
    	va_end(pa);
     
    	for(i=nargs-1;i>=0;--i)
    	{
    		arg=args[i];
    		__asm { push arg };
    	}
     
    	re=sprintf(buf,chaine);
     
    	for(i=0;i<nargs;++i)
    		__asm { pop eax };
     
    	return re;
    }
    Cependant il y a une perte de temps du fait que je suis oblige de depiler puis de rempiler en odre inverse les arguments qui sont passes a ma fonction. Y a-t-il moyen d'eviter cela ???
    Bob, Rédacteur C/C++ & PHP
    http://bob.developpez.com/

  2. #2
    Responsable technique

    Avatar de Anomaly
    Homme Profil pro
    Directeur
    Inscrit en
    Juin 2003
    Messages
    10 338
    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 338
    Points : 130 354
    Points
    130 354
    Billets dans le blog
    1
    Par défaut
    Si c'est pour retraiter la sortie d'un printf, pourquoi ne pas utiliser vsprintf plutôt ? Et retraiter la chaîne obtenue ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    void my_printf(const char* format, ...)
    {
      va_list v;
      char buf[500]; /* c'est mal, à changer :p */
     
      va_start(v, format);
      vsprintf(buf, format, v);
      va_end(v);
     
      /* retravailler buf */
    }
    Responsable technique forum & site

    Si ce message (ou un autre) vous a aidé et/ou vous semble pertinent, votez pour lui avec

  3. #3
    Bob
    Bob est déconnecté
    Membre averti
    Avatar de Bob
    Inscrit en
    Mars 2002
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 115
    Points : 378
    Points
    378
    Par défaut
    Je ne connaissais pas cette fonction.
    Ca resout le pb.
    Merci
    Bob, Rédacteur C/C++ & PHP
    http://bob.developpez.com/

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

Discussions similaires

  1. Modifier la fonction printf de bcb
    Par yozart dans le forum C++Builder
    Réponses: 0
    Dernier message: 24/10/2008, 11h45
  2. la fonction printf démystifiée
    Par saad.hessane dans le forum C
    Réponses: 22
    Dernier message: 10/07/2008, 14h22
  3. [MASM32] Comment utiliser la fonction printf
    Par _Michel dans le forum x86 32-bits / 64-bits
    Réponses: 26
    Dernier message: 08/11/2007, 11h09
  4. fonction printf
    Par ydeleage dans le forum C
    Réponses: 7
    Dernier message: 30/05/2002, 11h24

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