C:将可变数量的参数从一个函数传递到另一个函数

所以,这是我现在面临的一个小问题 – >我正在尝试编写一个接受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); } 

所以,任何人都知道我该怎么做才能实现它? 我会非常感谢任何帮助:)

你想使用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); } 

使用varargs接受可变数量的参数,然后使用sprintf创建新消息

你可以使用stdarg.h va_list

C示例: http : //www.tutorialspoint.com/cprogramming/c_variable_arguments.htm C ++示例: http : //www.cprogramming.com/tutorial/lesson17.html 。

当然,请参见手册页: http : //linux.die.net/man/3/stdarg

手册页示例供参考:

 #include  #include  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); } 

有一个包含此function的库。 以下是参考中的一些示例代码:

 #include  /* va_list, va_start, va_arg, va_end */ int FindMax (int n, ...) { int i,val,largest; va_list vl; va_start(vl,n); largest=va_arg(vl,int); for (i=1;ival)?largest:val; } va_end(vl); return largest; } 

省略号实际上是有效代码,您可以使用va_list对象来解析可变数量的参数。