如何实现C中的printf()?

KennyLiu 2007-01-12 04:11:47
如题。
...全文
9506 67 打赏 收藏 转发到动态 举报
写回复
用AI写文章
67 条回复
切换为时间正序
请发表友善的回复…
发表回复
快乐的小菜鸟 2011-09-27
  • 打赏
  • 举报
回复
C primer里面有 有一个库 实现变长参数的
bluesea147 2011-09-27
  • 打赏
  • 举报
回复
看内核源码的把

我也觉得,人家要问的是底层实现,系统终端调用.可变参数虽然是个问题,但是用C的代码处理下逻辑还是可以解决的
purewqk 2010-10-26
  • 打赏
  • 举报
回复
mark~~~
清钟沁桐 2010-10-26
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 huangpeng8612 的回复:]
给你个简单点的库函数实现,memcpy(char *dest, char *src, int count).它其实是一个宏:
#define memcpy(dest,src,count) asm("rep stosb\n":""D"(dest),"S"(src),"c"(count))

按此方式可以手动实现自己的printf,加上#if等宏也能让它可移植.
[/Quote]

这个怎么看到的 ??
qybao 2010-10-26
  • 打赏
  • 举报
回复
mark
AI应用技术 2010-10-26
  • 打赏
  • 举报
回复
使用getchar(),putchar()模拟下可以实现
zhutianjin4355255 2010-10-26
  • 打赏
  • 举报
回复
我也来一个吧


void HIS_DcuPrintf (char *fmt, ...)
{
va_list ap;

if (s_Print_bEnableUart==FALSE)
return;

va_start (ap, fmt);

vprintf (fmt, ap);
printf ("\n");

va_end (ap);
}
AnYidan 2010-10-26
  • 打赏
  • 举报
回复
大牛!!收藏了
乐CC 2010-10-26
  • 打赏
  • 举报
回复
为什么没有人说中断呢,不使用IO中断怎么个输出法,都围着可变参数说话。
王大军9527 2010-10-26
  • 打赏
  • 举报
回复
mark!
youfeng888 2010-10-26
  • 打赏
  • 举报
回复
黎翔 2010-10-26
  • 打赏
  • 举报
回复
学习拉
不想低调 2010-10-26
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 kennyliu 的回复:]

to jixingzhong(瞌睡虫·星辰)

怎么myprintf()里面还有printf()??
[/Quote]
月中蓝 2010-10-19
  • 打赏
  • 举报
回复
厉害啊
wwjzcd 2010-10-19
  • 打赏
  • 举报
回复
路过,学习
cheng_fengming 2010-10-19
  • 打赏
  • 举报
回复
[Quote=引用 50 楼 cheng_fengming 的回复:]
mark一下,明天去公司贴一段代码上来。
[/Quote]

int SafePrint(char *szBuf,int nMaxLength, char *szFormat,...)
{
int nListCount = 0;
va_list pArgList;
if (!szBuf)
{
goto SafePrint_END_PROCESS;
}
va_start(pArgList,szFormat);
nListCount += _vsnprintf(szBuf+nListCount,nMaxLength-nListCount,szFormat,pArgList);
va_end(pArgList);

if (nListCount > (nMaxLength-1))
{
nListCount = nMaxLength - 1;
}
*(szBuf+nListCount) = '\0';

SafePrint_END_PROCESS:
return nListCount;
}

以上代码来自肖舸《0 BUG》一书。
gao664772188 2010-10-18
  • 打赏
  • 举报
回复
和楼主一起学习啦!!
cheng_fengming 2010-10-18
  • 打赏
  • 举报
回复
mark一下,明天去公司贴一段代码上来。
Uncle_Chesur 2010-10-18
  • 打赏
  • 举报
回复
为了得分
morgan_xww 2010-10-18
  • 打赏
  • 举报
回复
一个printf(); 搞这么复杂啊!! 这么多学问啊 !!! 学习了。。。。
加载更多回复(47)

69,373

社区成员

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

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