void foo(char *fmt,...)
{
printf(fmt,(问题在这里));
}
我想把foo中的可变的参数传递给printf,比如foo("%d",2),我希望printf那里的fmt之后传递的就是这个2.
现在,printf是个系统函数,不能修改它;其次,不要用vprintf这样的函数,也就是说限定使用printf。
大家有什么好的方法没有,谢谢
10 个解决方案
#1
很简单,可以参考sprintf的实现
#2
/* vsprintf example */
#include <stdio.h>
#include <stdarg.h>
void PrintFError (char * format, ...)
{
char buffer[256];
va_list args;
va_start (args, format);
vsprintf (buffer,format, args);
perror (buffer);
va_end (args);
}
int main ()
{
FILE * pFile;
char szFileName[]="myfile.txt";
int firstchar = (int) '#';
pFile = fopen (szFileName,"r");
if (pFile == NULL)
PrintFError ("Error opening '%s'",szFileName);
else
{
// file successfully open
fclose (pFile);
}
return 0;
}
#3
/* vprintf example */
#include <stdio.h>
#include <stdarg.h>
void WriteFormatted (char * format, ...)
{
va_list args;
va_start (args, format);
vprintf (format, args);
va_end (args);
}
int main ()
{
WriteFormatted ("Call with %d variable argument.\n",1);
WriteFormatted ("Call with %d variable %s.\n",2,"arguments");
return 0;
}
#4
直接传递 va_list 即可
#5
学习
#6
问题已经说不能vsprintf了,再说不是所有的函数都接受va_list参数的
#7
mark
#8
只能把va_list解析出来再用,这个函数的功能应该和vsprintf功能一样
下面是个简单的例子
这里va_start,va_arg都是预编译,va_list其实是个字符型指针
下面是个简单的例子
#include <stdio.h>
#include <stdarg.h>
void foo(char *fmt,...)
{
char *p=fmt;
va_list arg_ptr;
int i,j,k;
va_start(arg_ptr,fmt);
i=va_arg(arg_ptr,int);
j=va_arg(arg_ptr,int);
k=va_arg(arg_ptr,int);
va_end(arg_ptr);
printf(fmt,i,j,k);
}
int main(void)
{
int n=321;
foo("%d %d %d\n",n+1,n+2,n+4);
getchar();
return 0;
}
这里va_start,va_arg都是预编译,va_list其实是个字符型指针
#9
楼主既然自己选择了这样的无聊束缚,那就无解啦。
#10
没有这样试过,可以学习下
#1
很简单,可以参考sprintf的实现
#2
/* vsprintf example */
#include <stdio.h>
#include <stdarg.h>
void PrintFError (char * format, ...)
{
char buffer[256];
va_list args;
va_start (args, format);
vsprintf (buffer,format, args);
perror (buffer);
va_end (args);
}
int main ()
{
FILE * pFile;
char szFileName[]="myfile.txt";
int firstchar = (int) '#';
pFile = fopen (szFileName,"r");
if (pFile == NULL)
PrintFError ("Error opening '%s'",szFileName);
else
{
// file successfully open
fclose (pFile);
}
return 0;
}
#3
/* vprintf example */
#include <stdio.h>
#include <stdarg.h>
void WriteFormatted (char * format, ...)
{
va_list args;
va_start (args, format);
vprintf (format, args);
va_end (args);
}
int main ()
{
WriteFormatted ("Call with %d variable argument.\n",1);
WriteFormatted ("Call with %d variable %s.\n",2,"arguments");
return 0;
}
#4
直接传递 va_list 即可
#5
学习
#6
问题已经说不能vsprintf了,再说不是所有的函数都接受va_list参数的
#7
mark
#8
只能把va_list解析出来再用,这个函数的功能应该和vsprintf功能一样
下面是个简单的例子
这里va_start,va_arg都是预编译,va_list其实是个字符型指针
下面是个简单的例子
#include <stdio.h>
#include <stdarg.h>
void foo(char *fmt,...)
{
char *p=fmt;
va_list arg_ptr;
int i,j,k;
va_start(arg_ptr,fmt);
i=va_arg(arg_ptr,int);
j=va_arg(arg_ptr,int);
k=va_arg(arg_ptr,int);
va_end(arg_ptr);
printf(fmt,i,j,k);
}
int main(void)
{
int n=321;
foo("%d %d %d\n",n+1,n+2,n+4);
getchar();
return 0;
}
这里va_start,va_arg都是预编译,va_list其实是个字符型指针
#9
楼主既然自己选择了这样的无聊束缚,那就无解啦。
#10
没有这样试过,可以学习下