在 C 中实现 Variadic 函数

Implement Variadic function in C

我正在尝试为具有类似 printf 行为的日志函数编写包装器。

谁能告诉我为什么下面的例子不起作用?

#include <stdarg.h>

void message(int level, const char* format, ...)
{
    if(level > 3)
        return;

    static char msgBuff[1024] = {0};

    va_list argptr;
    va_start(argptr, format);
    snprintf(msgBuff, sizeof(msgBuff), format, argptr);
    va_end(argptr);
    printf("%s", msgBuff); // Dummy Call
}


int main()
{
    int a = 42;
    message(3, "This is a test: %s %i", "The answer is ", a);
    return 0;
}

输出:

This is a test:  0

格式字符串后 snprintf 的参数必须是根据格式字符串中的转换说明符预期的各个参数。 argptr不是这样的论证,所以调用不正确。

要使用 va_list 打印可变参数,请调用 vsnprintf 而不是 snprintf