Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
823 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [C] fct nombre de parametres variables

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] fct nombre de parametres variables

n°1607319
ffomnislas​h
Posté le 02-09-2007 à 20:16:44  profilanswer
 

:hello:  
 
J'ai une fonction print_error qui permet d'affiche une erreur avec une certaine forme. Elle possède plusieurs paramètres dont:
- une chaine de caractère avec des %d, %s ...
- un nombre de paramètres variables (...) qui correspondent aux %d, %s ....
 
Dans la fonction print_error j'aimerai pouvoir faire quelque chose du genre:

printf(chaine, ...)


C'est à dire renvoyer la chaine et les paramètres supplémentaires dans printf.
 
Seulement je ne voit pas du tout comment faire :(


Message édité par ffomnislash le 02-09-2007 à 20:17:12

---------------
-- Unimangaff --
mood
Publicité
Posté le 02-09-2007 à 20:16:44  profilanswer
 

n°1607321
Joel F
Real men use unique_ptr
Posté le 02-09-2007 à 20:20:13  profilanswer
 

essaye ca :
 

Code :
  1. #include <stdarg.h>
  2. int print_error( const char* format, ... )
  3. {
  4.   va_list arguments;
  5.   va_start (arguments, format);
  6.   puts("ERREUR !! - " );
  7.   printf(format, arguments);
  8.   va_end (arguments);
  9. }

n°1607323
ffomnislas​h
Posté le 02-09-2007 à 20:25:53  profilanswer
 

ca ne fonctionne pas.  
Avec un entier j'obtiens n'importe quoi comme résultat
et avec une chaine ca segfault.

n°1607325
Joel F
Real men use unique_ptr
Posté le 02-09-2007 à 20:32:00  profilanswer
 

montre ton code

n°1607327
ffomnislas​h
Posté le 02-09-2007 à 20:48:49  profilanswer
 

Code :
  1. void print_error(const char* type, const char* file, int line,const char* fct, const char* msg, ...)
  2. {
  3. va_list ap;                                                                                                         
  4. va_start(ap,msg);                                                                                 
  5. fprintf(stderr,"DAEMON:%s (%d)%s: %s\n",type,line,file,fct);                                                                                       
  6. fprintf(stderr,"\t" );                                                             
  7. fprintf(stderr,msg,ap);                                                                                           
  8. fprintf(stderr,"\n\n" );                                                                                                 
  9. va_end(ap);                                                                                                           
  10. }


 
 
l'appel:

Code :
  1. print_error("WARNING", __FILE__, __LINE__,__func__, "bitrates==null %d %s",23, "test" );

Message cité 1 fois
Message édité par ffomnislash le 02-09-2007 à 21:20:08
n°1607376
ffomnislas​h
Posté le 02-09-2007 à 23:54:54  profilanswer
 

solution trouvé ici:
http://forum.hardware.fr/hfr/Progr [...] 6152_1.htm
 
il existe les fonctions vsprintf, vfprintf :)

n°1607515
Emmanuel D​elahaye
C is a sharp tool
Posté le 03-09-2007 à 11:19:53  profilanswer
 

ffomnislash a écrit :

Code :
  1. va_list ap;                                                                                                         
  2. va_start(ap,msg);                                                                                 
  3. <...>
  4. fprintf(stderr,msg,ap);




Il faut utiliser vfprintf() :  
[C99 pour __func__]

Code :
  1. #include <stdarg.h>
  2. #include <stdio.h>
  3. void print_error (const char *type, const char *file, int line,
  4.                   const char *fct, const char *msg, ...)
  5. {
  6.    va_list ap;
  7.    va_start (ap, msg);
  8.    fprintf (stderr, "DAEMON:%s (%d)%s: %s\n", type, line, file, fct);
  9.    fprintf (stderr, "\t" );
  10.    vfprintf (stderr, msg, ap);
  11.    fprintf (stderr, "\n\n" );
  12.    va_end (ap);
  13. }
  14. int main (void)
  15. {
  16.    print_error ("WARNING", __FILE__, __LINE__, __func__,
  17.                 "bitrates==null %d %s", 23, "test" );
  18.    return 0;
  19. }



DAEMON:WARNING (18)main.c: main
        bitrates==null 23 test
 
 
Press ENTER to continue.


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [C] fct nombre de parametres variables

 

Sujets relatifs
Sortir un nombre d'un classement "virtuel"[résolu] PHP : lire une page web et séparation paramètres
recupérer un nombre dans un fichier texte grace a un Bat{Résolu} problème URL et variables
Passage de variables d'un module vers un userformActivePerl et passage de paramètres aux dll
[DB2] extraire un nombre packé d'un CHAR[Résolu] Problème avec les variables de session
Modifier les variables d'environnement système sans rebooter 
Plus de sujets relatifs à : [C] fct nombre de parametres variables


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR