Передача аргумента переменной C в printf / vsprintf - PullRequest
0 голосов
/ 27 января 2020

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

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

my2_printf(const char *fmt, ...)
{
  va_list ap; 
  va_start(ap, fmt);
  printf(fmt, ap);
  va_end(ap);
}

my_printf(const char *fmt, ...)
{
  va_list ab; 
  va_start(ab, fmt);
  vfprintf(stdout, fmt, ab);
  va_end(ab);
}

main()
{
  int i = 5;
   my_printf("This is a test %d =>  %s\n", i, "done");
   my2_printf("This is a test %d =>  %s\n", i, "done");
}

Вывод, который я получаю, следующий:

This is a test 5 =>  done
This is a test -171084944 => 

1 Ответ

0 голосов
/ 27 января 2020

Поскольку существует вариант printf, который ожидает аргумент va_list. Если у вас есть va_list, вы должны использовать функции с префиксом v, например vprintf.

Вызов на printf ведет неопределенное поведение .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...