Alors, voici un petit problème que je rencontre actuellement -> J'essaie d'écrire une fonction qui acceptera un message char * et un nombre variable d'arguments. Ma fonction modifiera un peu le message, puis il appellera printf avec le message et les paramètres donnés. Essentiellement, j'essaie d'écrire quelque chose comme ça:
void modifyAndPrintMessage(char* message,...){
char* newMessage; //copy message.
//Here I'm modifying the newMessage to be printed,and then I'd like to print it.
//passed args won't be changed in any way.
printf(newMessage,...); //Of course, this won't work. Any ideas?
fflush(stdout);
}
Alors, tout le monde sait que dois-je faire pour que cela se produise? Je serais très reconnaissant pour toute aide :)
Vous voulez utiliser varargs ...
void modifyAndPrintMessage( char* message, ... )
{
// do somehthing custom
va_list args;
va_start( args, message );
vprintf( newMessage, args );
va_end( args );
}
void modifyAndPrintMessage(char* message,...)
{ char newMessage[1024]; // **Make sure the buffer is large enough**
va_list args;
va_start(args, message);
vsnprintf(newMessage, message, args);
printf(newMessage);
fflush(stdout);
}
Vous pouvez utiliser va_list
à partir de stdarg.h
,
Exemple C: http://www.tutorialspoint.com/cprogramming/c_variable_arguments.htm exemple C++: http://www.cprogramming.com/tutorial/lesson17.html .
Bien sûr, voir la page de manuel: http://linux.die.net/man/3/stdarg
Exemple de page de manuel pour référence:
#include <stdio.h>
#include <stdarg.h>
void
foo(char *fmt, ...)
{
va_list ap;
int d;
char c, *s;
va_start(ap, fmt);
while (*fmt)
switch (*fmt++) {
case 's': /* string */
s = va_arg(ap, char *);
printf("string %s\n", s);
break;
case 'd': /* int */
d = va_arg(ap, int);
printf("int %d\n", d);
break;
case 'c': /* char */
/* need a cast here since va_arg only
takes fully promoted types */
c = (char) va_arg(ap, int);
printf("char %c\n", c);
break;
}
va_end(ap);
}