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对象来解析可变数量的参数。