我正在尝试解决以下问题......
我有一个功能,应该采取以下论点:
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”变量时,我会得到随机数据。
答案 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整除,因为它们是成对解析的。