wch*_*gin 12 c printf function variadic-functions
我想要一个辅助函数log,基本上执行以下操作:
log(file, "array has %d elements\n", 10);
// writes "2014-02-03 16:33:00 - array has 10 elements" to &file
Run Code Online (Sandbox Code Playgroud)
我有时间部分,我有文件写入部分.然而,问题是方法签名本身log- 我应该放什么?这表示printf声明以...关键字结束,但我如何在我的函数中使用它?
void log(FILE *f, const char * format, ...) // how would I pass ... to fprintf?
Run Code Online (Sandbox Code Playgroud)
让我编辑这个包含更多信息.
我有一个const char * now ()返回"2014-02-03 16:33:00"形式的字符串.我想像这样传递另一个格式字符串.这两个陈述应该是等同的:
log(file, "array has %d elements\n", 10);
fprintf(file, "%s - array has %d elements\n", now(), 10);
Run Code Online (Sandbox Code Playgroud)
我知道这vfprintf可以让我通过va_list,但我怎么能把它now()作为第一个参数,在所有其他之前?
您正在寻找的方法是vfprintf或可能的vprintf(不清楚您的问题是哪一个)
这基本上printf是允许将a va_list作为参数显式传入的实现.因此,在您的方法中,您可以创建va_list方法参数并将其转发到vfprintf
void log(FILE* f, const char* format, ...) {
va_list args;
va_start (args, format);
vfprintf (f, format, args);
va_end (args);
}
Run Code Online (Sandbox Code Playgroud)
使用vprintf,声明为:
int vprintf(const char *format, va_list ap);
Run Code Online (Sandbox Code Playgroud)
在您的log函数中,调用va_start以获取va_list值,然后将该值传递给vprintf.
由于你的log函数需要FILE*参数,你可能想要使用vfprintf而不是vprintf(并且可能更新你的问题fprintf而不是printf).
顺便说一下,您可能想重新考虑使用该名称log; 这是在中声明的标准函数的名称<math.h>.
反映您更新的问题,您可以直接log打电话打印时间戳fprintf:
va_list(args);
fprintf(f, "%s - ", now());
va_start(args, format);
vfprintf(f, format, args);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15880 次 |
| 最近记录: |