【问题标题】:Passing variable numbers of arguments to a C function将可变数量的参数传递给 C 函数
【发布时间】:2015-09-23 23:17:36
【问题描述】:

我正在探索在 C 中使用可变参数,使用 GNU(在 Code::Blocks 中)。当我执行以下代码时:

#include <stdio.h>
#include <stdarg.h>

void VarargsTest(int n_args, ...)
{
    int i, arg;
    va_list ap;

    fprintf(stderr, "N_args is %d\n", n_args);
    va_start(ap, n_args);
    for(i= 0; i < n_args; i++)
        {
        arg= va_arg(ap, int);
        fprintf(stderr, "arg %d is %d\n", i, arg);
        }
    va_end(ap);
}

int main()
{
    VarargsTest(1,2,3,4,5,6,5,4,3,2,1);
    return 0;
}

我得到以下结果:

N_args is 1
arg 0 is 2

即参数的数量 (11) 未正确报告给 VarargsTest 函数,甚至它看到的唯一一个参数也不正确。有什么想法吗?

【问题讨论】:

  • VarargsTest(11, 1,2,3,4,5,6,5,4,3,2,1);

标签: c variables arguments


【解决方案1】:

您的函数期望传递给函数的第一个参数是传递给函数的变量参数的数量。由于您为此值传递 1,因此它只查看一个超出所需参数的参数。

如果你想让它读取所有参数,第一个值应该是 10,因为你有一个必需参数和 10 个可选参数。

【讨论】:

    【解决方案2】:

    你必须明确地将参数的数量传递给函数,所以行

    VarargsTest(1,2,3,4,5,6,5,4,3,2,1);
    

    应该是

    VarargsTest(11,1,2,3,4,5,6,5,4,3,2,1);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-21
      • 2015-01-05
      • 2019-01-17
      • 1970-01-01
      • 2011-01-13
      • 2011-03-16
      相关资源
      最近更新 更多