我想实现一个类似于printf()
的函数Myprintf()
,目前我的做法是:
sprintf(demoString, "Num=%d String=%s", num, str);
Myprintf(demoString);
我想要把这个函数调用替换为:
Myprintf("Num=%d String=%s", num, str);
这怎么可能呢?
#include <stdio.h>
#include <stdarg.h>
extern int Myprintf(const char *fmt, ...);
int Myprintf(const char *fmt, ...)
{
char buffer[4096];
va_list args;
va_start(args, fmt);
int rc = vsnprintf(buffer, sizeof(buffer), fmt, args);
va_end(args);
...print the formatted buffer...
return rc;
}
从你的问题中不清楚输出是如何完成的;你现有的Myprintf()
可能在某个地方输出,也许是用fprintf()
。如果是这种情况,你可以改为写:
int Myprintf(const char *fmt, ...)
{
va_list args;
va_start(args, fmt);
int rc = vfprintf(debug_fp, fmt, args);
va_end(args);
return rc;
}
void
并不必关心变量rc
。这是“printf()覆盖函数”的一个相当常见的模式。