2012-03-19 6 views
1
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); 
    ... 

를 판독 I n은 "ASD"X1 = 1이와 stdarg.h 너무 많은 인자

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

같이 그것을 사용하고, X2 = 2, X3 = 3; 출력에

나는

DODANO 1 
DODANO 2 
DODANO 3 
DODANO 1081714496 
+1

특히 회원 기능에서 'va_list'를 사용하지 마십시오. 그리고 인수의 수를 알아야 할 필요가 있다면'va_arg'는 행복하게 전체 메모리를 읽을 것입니다. –

답변

2

가변 인자 함수 인수 하지 형태 보증, 또는 그 문제에 대한 '안전'의 일종 볼 수 있습니다. 얼마나 많은 인자가 있고 그들의 유형이 무엇인지 귀하의 기능과 통신하는 것은 의 책임입니다.

코드에서 루프를 종료하는 유일한 것은 x이 false로 평가 될 때입니다. 모호하게 입력 된 데이터는 정수 값으로 구성되어있는 것으로 보이며 마지막 가변 인수가 0이되어야합니다. 이는 사용자의 예제가 아닙니다.

wtih (n, x1, x2, x3, 0) 함수를 호출 해보십시오.

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; 
}