English 中文(简体)
通过程序加以说明以图印
原标题:Pass format string through procedure to fprintf
  • 时间:2009-10-21 17:22:51
  •  标签:

I m从事一项方案,制作FDF文档,填写Adobe PDF表格。 目前,我有各种程序,如每次终止之前一样,开放了国防军档案,撰写了具体数据,并关闭了档案。

我试图以单独程序将数据编成法,然后采用其他程序。 这将使守则按任务进一步分离,如果我今后不得不改变,我可以轻易这样做。

然而,我有一些问题,因为我需要通过不同数量的变数来印证。 这就是说,我曾经有这样的一线:

fprintf(fp,"<</T(f1_44(0))/V(%d)>>
",wages);

我写了以下职能,但我可以不去做:

void writeToFDF(FILE *fp, char *filename, char *data, char *arg)
{
/* independent method for writing to FDF file */

/* open file */
fp=fopen(filename,"a");

fprintf(fp,data,arg);

/* close file */
fclose(fp);
}

因此,从理论上讲,我将在父母的职责中呼吁:

writeToFDF(fp,"1040.fdf","<</T(f1_44(0))/V(%d)>>
",wages);

我现在就错了,我认为,它必须同职能的最后一部分做争辩。 而且,如果我有多种论点,我如何能够让它发挥作用?

谢谢。

最佳回答

页: 1 它将接受一份可变的论据清单。

与此类似:

void writeToFDF(FILE *fp, char *filename, char *data, ...)
{
va_list pl;

/* independent method for writing to FDF file */

/* open file */
fp=fopen(filename,"a");

va_start (pl, data);

vfprintf(fp,data,pl);

/* close file */
fclose(fp);
va_end(pl);
}

EDIT:虽然我试图与你原来的法典保持接近,但混淆FLE *fp论点的客观解决办法实际上较好:pp仅具有当地意义(在这一职能中开启和关闭),因此不应被左右。

问题回答

这就是<代码>vfprintf。

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

void writeToFDF(const char *filename, const char *format, ...) {
    va_list ap;
    FILE *fp = fopen(filename, "a");
    va_begin(ap, format);
    vfprintf(fp, format, ap);
    va_end(ap);
    fclose(fp);
}

你们需要使用Variadic功能。 见,在C援引variadic功能。

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

   void foo(FILE *file, char *fmt, ...)
   {
       va_list ap;

       va_start(ap, fmt);
       vfprintf(file, fmt, ap);
       va_end(ap);
   }




相关问题
热门标签