gpt4 book ai didi

c - va_list 和 va_arg

转载 作者:太空狗 更新时间:2023-10-29 15:12:32 26 4
gpt4 key购买 nike

我这样使用 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,您需要将其转换为适当的类型,以便它作为正确的类型传递空指针的类型。)

关于c - va_list 和 va_arg,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9936249/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com