首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >创建一个带有自定义前缀的printf函数

创建一个带有自定义前缀的printf函数
EN

Stack Overflow用户
提问于 2018-06-03 08:21:43
回答 1查看 531关注 0票数 0

我正在尝试创建一个printf函数,它像这样打印

代码语言:javascript
复制
[INFO] whatever 123

va_args可以工作,但我不知道如何添加前缀。至少下面的代码不会这样做

代码语言:javascript
复制
#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;
}

有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2018-06-03 08:28:04

代码语言:javascript
复制
"[INFO] " fmt

这段代码不能工作。您在这里尝试使用的“字符串粘贴”行为是一种预处理器行为,而不是C操作符。它只能用于字符串常量,而不能用于变量。

在这里获得您想要的行为的最简单方法是简单地调用printf两次:

代码语言:javascript
复制
printf("[INFO] ");
va_start(argp, fmt);
vfprintf(stdout, fmt, argp);
va_end(argp);

您可能需要考虑的更困难的方法包括:

  • myprintf()定义为宏而不是函数,以便它可以在format参数上使用字符串粘贴。
  • "[INFO] "fmt复制到临时缓冲区中,并将其用作格式化字符串。
  • "[INFO] "复制到临时缓冲区中,使用vsnprintf()将输出附加到缓冲区,然后输出该输出。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50662279

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档