我这样使用 va_list :
void foo(const char* firstArg, ...) {
va_list args;
va_start (args, firstArg);
for (const char* arg = firstArg; arg != NULL; arg = va_arg(arg, const char*)) {
// do something with arg
}
va_end(args);
}
foo(“123”,“234”,“345”)
前三个参数已正确传递给 foo,但在完成“345”的情况下,
arg = va_arg(arg, const char*)
设置一些其他奇怪的值arg.
所以有什么问题。我使用 llvm3.0 作为编译器。
C 不会自动放入NULL
在一个的末尾...
参数列表。如果你想使用NULL
要检测参数的结尾,您必须显式传递它。一些函数(例如printf
) 使用较早的参数来决定它们何时到达参数末尾。
(Edit:实际上如果你想放一个NULL
最后,您需要将其转换为适当的类型,以便将其作为正确类型的空指针传递。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)