[英]va_list and va_arg
我像这样使用 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
)使用较早的参数来决定何时到达参数的末尾。
(编辑:实际上,如果您想在末尾放置一个NULL
,则需要将其强制转换为适当的类型,以便将其作为正确类型的空指针传递。)
我认为循环应该如下:
for (const char* arg = firstArg; arg != NULL; arg = va_arg(args, const char*))
变化是va_arg(args, const char*)
而不是va_arg(arg/*<<==*/, const char*)
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.