C 可变参数函数未按预期工作

C Variadic Function not working as intended

我正在尝试制作一个函数,该函数采用带格式的字符串(如 printf,但我希望它不是“%i”,而是 "n"(出于学习目的,不要问我为什么))。这是函数:

void test(char* args, ...)
{
    int length = strlen(args);
    va_list list;
    va_start(list, length);

    for (int i = 0; i < length; i++)
    {
        if (args[i] == 'n')
        {
            printf("%i", va_arg(list, int));
        }
    }
}

问题是当我这样调用它时:test("n", 13);它给出了另一个数字(-858993460)。有什么问题,我该如何解决?

您应该这样调用 va_start

va_start(list, args);

va_start的第二个参数必须是省略号前test的最后一个参数的名称,即args.