C++可变参数输出结果错误?
如下代码为什么输出的结果不是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个回答
test
2024-06-24
printValues
期望后面是一堆 int
,但是传给它的是一个 va_list
。va_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
作为参数。
回复
适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容