だから、これが私が今直面している小さな問題です->私はchar *メッセージと可変数の引数を受け入れる関数を書こうとしています。私の関数はメッセージを少し変更してから、メッセージと指定されたパラメーターを使用してprintfを呼び出します。基本的に、私はそのようなものを書き込もうとしています:
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);
}
だから、誰かがそれを実現するために私が何をすべきか知っていますか?私はどんな助けにも最も感謝するでしょう:)
可変引数を使用したい...
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);
}
va_list
からstdarg.h
を使用できます。
Cの例: http://www.tutorialspoint.com/cprogramming/c_variable_arguments.htm C++の例: http://www.cprogramming.com/tutorial/lesson17.html 。
もちろん、manページを参照してください: http://linux.die.net/man/3/stdarg
参考のためのマニュアルページの例:
#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);
}