stdarg.h读了太多参数

时间:2012-03-19 17:21:42

标签: c++

void wczytaj(N nazwa, O x1, ...) {
    va_list arg;
    O x;
    ...
    va_start (arg, x1);
    for (x = x1; x; x = va_arg(arg, O)) {
        w.punkt.push_back(x);
        cout << "DODANO " << x << endl;
    }
    va_end (arg);
    ...

我正在使用它

s.wczytaj(n, x1, x2, x3);

其中n是“asd”,x1 = 1,x2 = 2,x3 = 3;

在输出上我可以看到

DODANO 1
DODANO 2
DODANO 3
DODANO 1081714496

2 个答案:

答案 0 :(得分:2)

变量函数参数类型安全,或者任何类型的“安全”。 你的责任是向你的函数传达有多少参数以及它们的类型。

在您的代码中,唯一使循环终止的是x计算为false时。您的数据模糊不清,似乎由整数值组成,这就要求您的最后一个变量参数为零,这不是您的示例。

尝试使用(n, x1, x2, x3, 0)调用该函数。

答案 1 :(得分:1)

#include <stdarg.h>
#include <iostream>
void zytaj(int n, ...) {
  int i;
  va_list arg;
  va_start (arg, n); 
  for (i = 0; i < n; i++) {
    int val = va_arg(arg, int);
    std::cout << val << std::endl;
  }
  va_end (arg);
}

int main()
{
  zytaj(3, 4, 1, 7); 
  return 0;
}