2015-07-06 2 views
1

Я изучаю использование переменных аргументов в C, используя GNU (внутри Code :: Blocks). Когда я выполнить следующий код:Передача переменных чисел аргументов функции C

#include <stdio.h> 
#include <stdarg.h> 

void VarargsTest(int n_args, ...) 
{ 
    int i, arg; 
    va_list ap; 

    fprintf(stderr, "N_args is %d\n", n_args); 
    va_start(ap, n_args); 
    for(i= 0; i < n_args; i++) 
     { 
     arg= va_arg(ap, int); 
     fprintf(stderr, "arg %d is %d\n", i, arg); 
     } 
    va_end(ap); 
} 

int main() 
{ 
    VarargsTest(1,2,3,4,5,6,5,4,3,2,1); 
    return 0; 
} 

я получаю следующий результат:

N_args is 1 
arg 0 is 2 

т.е. число аргументов (11) не правильно сообщили функции VarargsTest, и даже один и только аргумент, который он видит, неверен. Есть идеи?

+2

'VarargsTest (11, 1,2,3,4,5, 6,5,4,3,2,1); ' – BLUEPIXY

ответ

6

Функция вы ожидаете, что первый параметр, переданный функции, будет числом переменных, переданных функции. Поскольку вы переходите в 1 для этого значения, он просматривает только один параметр за нужный.

Если вы хотите, чтобы он считывал все параметры, первое значение должно быть 10, так как у вас есть один требуемый параметр и 10 необязательных параметров.

+0

Нет проблем. Не стесняйтесь [принять этот ответ] (http://meta.stackexchange.com/q/5234), если он вам пригодится. – dbush

3

Вы должны явно передать число аргументов функции, поэтому линия

VarargsTest(1,2,3,4,5,6,5,4,3,2,1); 

должен быть

VarargsTest(11,1,2,3,4,5,6,5,4,3,2,1); 
Смежные вопросы