类似于C语言中的printf函数的函数参数

8

我想实现一个类似于printf()的函数Myprintf(),目前我的做法是:

sprintf(demoString, "Num=%d String=%s", num, str);
Myprintf(demoString);

我想要把这个函数调用替换为:
Myprintf("Num=%d String=%s", num, str);

这怎么可能呢?

2
我猜这个链接对你有用:http://www.eskimo.com/~scs/cclass/int/sx11b.html - Jack
3个回答

14
#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()覆盖函数”的一个相当常见的模式。

1
你需要定义一个带有变量参数的函数,并使用vsprintf来构建字符串。

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接