所以,这是我现在面临的一个小问题 - >我正在尝试编写一个接受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);
}
所以,任何人都知道我该怎么做才能实现它?我非常感谢任何帮助:)
答案 0 :(得分:17)
你想使用varargs ......
void modifyAndPrintMessage( char* message, ... )
{
// do somehthing custom
va_list args;
va_start( args, message );
vprintf( newMessage, args );
va_end( args );
}
答案 1 :(得分:4)
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);
}
答案 2 :(得分:0)
答案 3 :(得分:0)
您可以使用va_list
中的stdarg.h
,
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 <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);
}
答案 4 :(得分:-2)
有一个包含此功能的库。以下是参考文献中的一些示例代码:
#include <stdarg.h> /* 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;i<n;i++)
{
val=va_arg(vl,int);
largest=(largest>val)?largest:val;
}
va_end(vl);
return largest;
}
省略号实际上是有效代码,您可以使用va_list对象来解析可变数量的参数。