函数参数,如C中的printf

Shi*_*hab 3 c printf

我想实现一个Myprintf()接受类似参数的函数printf().现在我这样做:

sprintf(demoString, "Num=%d String=%s", num, str);
Myprintf(demoString);
Run Code Online (Sandbox Code Playgroud)

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

Myprintf("Num=%d String=%s", num, str);
Run Code Online (Sandbox Code Playgroud)

这怎么可能?

Jon*_*ler 10

#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;
}
Run Code Online (Sandbox Code Playgroud)

你的问题并不清楚输出是如何完成的; 你现有的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;
}
Run Code Online (Sandbox Code Playgroud)

如果您不想使用返回值,请将该函数声明为void并且不要使用该变量rc.

这是" printf()封面功能"的一种相当常见的模式.