C++可变参数输出结果错误?

作者站长头像
站长
· 阅读数 5

如下代码为什么输出的结果不是1,2,3,4?而是输出了错误的结果:1803629872 77304476 1803629872 0

#include <iostream>
#include <cstdarg>

// 函数:打印可变参数的值
void printValues(int count, ...) {
    va_list args;
    va_start(args, count);

    for (int i = 0; i < count; ++i) {
        int value = va_arg(args, int);
        std::cout << value << " ";
    }

    va_end(args);
}

// 函数:将可变参数传递给另一个带有可变参数的函数
void processValues(int count, ...) {
    va_list args;
    va_start(args, count);

    printValues(count, args);

    va_end(args);
}

int main() {
    processValues(4, 1, 2, 3, 4);

    return 0;
}
回复
1个回答
avatar
test
2024-06-24

printValues 期望后面是一堆 int ,但是传给它的是一个 va_listva_list 不是 int,当然就不对了。

如果想想现在这样调用,那么 printValues 的参数就应该是 va_list args ,而不是 ...

printValues(int count, va_list args)


C 的 printf 就有 v 系列函数,比如:int vprintf(const char *format, va_list arg);就是用 va_list 作为参数。

回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容