首页 > 解决方案 > 将 C 中的变量参数传递给 printf / vsprintf

问题描述

我正在尝试将我得到的变量参数传递给我调用的另一个函数。我写了一个示例代码来测试它。为什么 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 => 

标签: cprintf

解决方案


因为它的变体printf需要一个va_list参数。如果您有 a va_list,则必须使用带有v前缀的函数,例如vprintf.

调用会printf导致未定义的行为


推荐阅读