[C] fct nombre de parametres variables

fct nombre de parametres variables [C] - C - Programmation

Marsh Posté le 02-09-2007 à 20:16:44    

: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 --
Reply

Marsh Posté le 02-09-2007 à 20:16:44   

Reply

Marsh Posté le 02-09-2007 à 20:20:13    

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. }

Reply

Marsh Posté le 02-09-2007 à 20:25:53    

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

Reply

Marsh Posté le 02-09-2007 à 20:32:00    

montre ton code

Reply

Marsh Posté le 02-09-2007 à 20:48:49    

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
Reply

Marsh Posté le 02-09-2007 à 23:54:54    

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

Reply

Marsh Posté le 03-09-2007 à 11:19:53    

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/
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed