Hier ist ein kleines Problem, mit dem ich gerade konfrontiert bin -> Ich versuche eine Funktion zu schreiben, die eine char * -Nachricht und eine variable Anzahl von Argumenten akzeptiert. Meine Funktion ändert die Nachricht ein wenig und ruft dann printf mit der Nachricht und den angegebenen Parametern auf. Essentialy, ich versuche so etwas zu schreiben:
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);
}
Weiß also jemand, was ich tun soll, damit es passiert? Ich wäre für jede Hilfe sehr dankbar :)
Sie möchten varargs verwenden ...
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);
}
Sie können va_list
von stdarg.h
verwenden,
C-Beispiel: http://www.tutorialspoint.com/cprogramming/c_variable_arguments.htm C++ - Beispiel: http://www.cprogramming.com/tutorial/lesson17.html .
Und natürlich finden Sie in der Manpage: http://linux.die.net/man/3/stdarg
Manpage-Beispiel als Referenz:
#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);
}