如何实现自己的printf?

uu_snow 2007-11-27 05:11:33
我有一个需求是系统程序中所有的输出都能加上统一的前缀和后缀。
理想的实现方式或许是二次封装printf。

定义一个自己的函数:outprint(char *, ... )
在所有的程序中都不再直接用printf,而使用这个函数
在这个函数内部把传入的要print的串,加上前缀和后缀再print。

例如:
outprint("name=%s, age=%d", "xxx", 10);

而实际打印到屏幕上的信息是:
-->[debug] name=xxx, age=10 [debug over].

可以自动加上
前缀:-->[debug]
后缀: [debug over].

谢谢!
...全文
235 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
kingqin 2007-11-27
  • 打赏
  • 举报
回复

void outprint(char *fmt, ...)
{
printf("[debug]");
printf(fmt);
printf("[debug over].\r");
}

不知道行不行。
ckt 2007-11-27
  • 打赏
  • 举报
回复
改下不就行了


#include <stdarg.h>

void outprint(const char* pText, ...)
{
int iLen = strlen(pText);
char* pBuff = (char*)malloc(iLen+100); // 申请空间
memset(pBuff, 0, iLen+100);
strcpy(pBuff, "[debug]");

va_list va;
va_start (va, pText);
vsprintf(pBuff + strlen(pBuff), pText, va);
strcat(pBuff, "[debug over]");
va_end(va);

printf(pBuff); // 输出
free(pBuff); //释放
}

uu_snow 2007-11-27
  • 打赏
  • 举报
回复
定义1024的数组可能会不够呀,我不知道传入的值会多长,万一超过1024就错了
可是定义太长也不太好
有没更好的办法?
ouyh12345 2007-11-27
  • 打赏
  • 举报
回复
void DebugPrint(char *fmt, ...)
{
char out_print[1024];
strcpy(out_print, "[debug] ");
va_list vp;
va_start(vp, fmt);
vsprintf(out_print + strlen(out_print),fmt, vp);
va_end(vp);
strcat(out_print, " [debug over]");
//打印out_print
}
ckt 2007-11-27
  • 打赏
  • 举报
回复

#include <stdarg.h>

void outprint(const char* pText, ...)
{
char buf[1024] = {"[debug]"};

va_list va;
va_start (va, pText);
_vsnprintf (buf + strlen(buf), sizeof(buf) - 1, pText, va);

sprintf(buf, "%s[debug over]", buf);
va_end(va);
printf(buf);
}

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧