我正在尝试创建一个printf函数,它像这样打印
[INFO] whatever 123
va_args可以工作,但我不知道如何添加前缀。至少下面的代码不会这样做
#include <stdio.h>
#include <stdarg.h>
void myprintf (char *fmt, ...)
{
va_list argp;
va_start (argp, fmt);
vfprintf (stdout, "[INFO] " fmt, argp);
va_end (argp);
}
int main (int argc , char **argv)
{
myprintf ("arg count is %d\n", argc);
return 0;
}
有什么想法吗?
发布于 2018-06-03 08:28:04
"[INFO] " fmt
这段代码不能工作。您在这里尝试使用的“字符串粘贴”行为是一种预处理器行为,而不是C操作符。它只能用于字符串常量,而不能用于变量。
在这里获得您想要的行为的最简单方法是简单地调用printf
两次:
printf("[INFO] ");
va_start(argp, fmt);
vfprintf(stdout, fmt, argp);
va_end(argp);
您可能需要考虑的更困难的方法包括:
myprintf()
定义为宏而不是函数,以便它可以在format参数上使用字符串粘贴。"[INFO] "
和fmt
复制到临时缓冲区中,并将其用作格式化字符串。"[INFO] "
复制到临时缓冲区中,使用vsnprintf()
将输出附加到缓冲区,然后输出该输出。https://stackoverflow.com/questions/50662279
复制相似问题