函数参数,如C中的printf

时间:2013-02-08 05:07:00

标签: c printf

我想实现一个带有Myprintf()之类参数的函数printf()。 现在我这样做:

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

我想将此函数调用替换为:

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

这怎么可能?

3 个答案:

答案 0 :(得分:9)

#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 :(得分:1)

您需要定义function with variable arguments,并使用vsprintf来构建字符串。

答案 2 :(得分:1)

printf及其亲属属于一系列名为可变函数的函数,C标准库中的<stddef.h>标题中有宏/函数来操作可变参数参数列表。请查看GNU文档中的示例:How Variadic Functions are Defined and Used