Как напечатать значения переменных аргументов в C? - PullRequest
1 голос
/ 29 сентября 2010

У меня есть функция

void func(int x, char *str, ...)
{
  ...
}

Я вызываю ее следующим образом:

func(1, "1", "2", "3");

Как я могу напечатать значения всех дополнительных аргументов (2, 3) в функции

Ответы [ 3 ]

1 голос
/ 29 сентября 2010

На справочной странице STDARG об использовании va_arg для получения следующего аргумента:

Если следующего аргумента нет или тип не совместим с типомфактический следующий аргумент (как продвигается в соответствии с продвижением аргументов по умолчанию), случайные ошибки будут возникать.

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

Тем не менее, если вы хотите проявить осторожность, вы можете попробовать:

void func(int x,char *str, ...)
{
    va_list al;
    va_start(al,str);

    while(x>0)
    {
        str=va_arg(al,char *);
        --x;      
    }

    while(str != NULL)
    {
        printf("%s ",str);
        str=va_arg(al,char *);
    }
    va_end(al);
}

С,

func(1,"1","2","3");

Я получил вывод,

2 3 U��WVS�O  

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

1 голос
/ 29 сентября 2010

Обычно с переменными аргументами передают строку, которая описывает переменные аргументы, например, printf (char * format_string, ...);

Это решение - и обычное решение - вашей проблемы.

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

Итак, если вы получили строку формата, похожую на printf, и это "% d% u", вы знаете, что у вас есть int, за которым следует беззнаковое int.

0 голосов
/ 29 сентября 2010

поиск va_list на этом сайте.Пример: Что такое оператор эллипса в c

...