ansi中可变数量的参数(不同类型)

时间:2016-08-18 09:58:45

标签: c

我正在尝试解决以下问题......
我有一个功能,应该采取以下论点:

change("input.file","output.file", 20, "file1.file", 21, "file2.file", 22, "file3.file", 23, "file4.file);

所以在运行此功能的情况下会有:

#include <stdarg.h>
int change(char input[], char output[], int n, ...)
{
  va_list ap;
  unsigned int a;
  char *name;

  va_start(ap, n);

  ...

  for (; n; n-=2) {
    a = va_arg(ap, int);
    name = va_arg(ap,char *);

    ...

  }
  va_end(ap);
  return i;
}

此功能的定义是:

android.support.v14.preference.PreferenceFragment 

但这不能正常工作。在尝试获取“a”和“name”变量时,我会得到随机数据。

2 个答案:

答案 0 :(得分:1)

你错过了n的论点。结果,其他一切都没了。

“20”读为n,“file1.file”读为a,“21”为name,“file2.file”为a,等

像这样调用函数:

                              //   v--- add this
change("input.file","output.file", 8, 20, "file1.file", 
                                      21, "file2.file", 
                                      22, "file3.file", 
                                      23, "file4.file");

答案 1 :(得分:1)

对函数更改的调用未正确执行。第三个参数必须是尾随参数的计数。

两个尾随参数。第三个参数2对应于函数更改定义中的第三个参数,名为n

change("input.file", "output.file", 2, 20, "file1.file");

八个尾随论点:

change("input.file", "output.file", 8, 20, "file1.file", 21, "file2.file", 
                                       22, "file3.file", 23, "file4.file");

count和尾随参数count必须可以被2整除,因为它们是成对解析的。

相关问题