printf函数与vsprintf函数的区别

[复制链接]
 楼主| 醉心369 发表于 2013-3-20 18:19 | 显示全部楼层 |阅读模式
首先大侠们说说他们的区别,然后讲解一下vsprintf函数的用法。
vsprintf函数里面调用了putchar函数了吗
refee 发表于 2013-3-20 19:06 | 显示全部楼层
功能差不多的。附件是vsprintf源码供参考……

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| 醉心369 发表于 2013-3-21 13:56 | 显示全部楼层
refee 发表于 2013-3-20 19:06
功能差不多的。附件是vsprintf源码供参考……

printf函数由putchar函数实现的。
vsprintf函数是由putchar函数实现的吗?
refee 发表于 2013-3-21 13:58 | 显示全部楼层
醉心369 发表于 2013-3-21 13:56
printf函数由putchar函数实现的。
vsprintf函数是由putchar函数实现的吗?

所以偶才在二楼贴上源代码让你自个看看的呀 :)
 楼主| 醉心369 发表于 2013-3-21 14:36 | 显示全部楼层
refee 发表于 2013-3-21 13:58
所以偶才在二楼贴上源代码让你自个看看的呀

我看过了,里面有好多都看不懂,小弟的C语言水平看来很菜,也没有看到调用putchar()这个函数,但是我怕调用#include <stdarg.h>和#include <string.h>时候调用putchar(),还望指示一下。
 楼主| 醉心369 发表于 2013-5-3 18:47 | 显示全部楼层
谁有puts()和printf()的源函数啊
 楼主| 醉心369 发表于 2013-5-8 18:10 | 显示全部楼层
当调用puts()和printf()函数时,如果打开了串口中断,还需要什么特别注意的吗
ccxlslr 发表于 2013-5-8 21:07 | 显示全部楼层
printf 操作要硬件的,有硬件相关的代码
vsprintf  直接操作内存。

用vsprintf 可以实现在printf ,可以把信息打印在 LCD,串口,SPI接口,IIC,EEPROM 等设备上
ccxlslr 发表于 2013-5-8 21:09 | 显示全部楼层
unsigned int lcd_char_printf(const char *fmt, ...)
{
    char buf[PRINTF_BUFFER_SIZE];

    va_list vp;
    va_start(vp, fmt);
    vsprintf(buf, fmt, vp);

    return lcd_char_puts(buf);
}

一个字符液晶的程序,能工作的,当然前提是要写一个输出字符串的函数
 楼主| 醉心369 发表于 2013-5-9 10:30 | 显示全部楼层
ccxlslr 发表于 2013-5-8 21:09
unsigned int lcd_char_printf(const char *fmt, ...)
{
    char buf;

这个函数是不是还少一条语句va_end(vp)呢?
ccxlslr 发表于 2013-5-10 08:54 | 显示全部楼层
醉心369 发表于 2013-5-9 10:30
这个函数是不是还少一条语句va_end(vp)呢?

就是,这个程序曾经在Keil C51下调试的,Keil下va_end什么都没干。

其它编译器,不知道有何影响。大家记得加上。
1189594 发表于 2013-5-16 16:57 | 显示全部楼层
我也想问一下    我在2440里看到打印函数
unsigned int Uart_printf(const char *fmt, ...)
{
    char buf[128];

    va_list vp;
    va_start(vp, fmt);
    vsprintf(buf, fmt, vp);
    Uart_printf(buf);
    va_end(vp);
}

但是vsprintf(buf, fmt, vp)没用到,这个函数居然还能用!而且还能打印正确的字符.....   求解?
 楼主| 醉心369 发表于 2013-5-17 13:53 | 显示全部楼层
1189594 发表于 2013-5-16 16:57
我也想问一下    我在2440里看到打印函数
unsigned int Uart_printf(const char *fmt, ...)
{

关于2440,我不太了解。如果用c++编程,可以用你所说的函数。问一下,2440是什么,用的是什么语言编程?
1189594 发表于 2013-5-23 09:09 | 显示全部楼层
2440是ARM9   用C
 楼主| 醉心369 发表于 2013-5-24 14:55 | 显示全部楼层
1189594 发表于 2013-5-23 09:09
2440是ARM9   用C

如果用C的话,支持函数重载吗?我记得不支持啊,Uart_printf()不是函数重载吗
 楼主| 醉心369 发表于 2013-6-1 14:59 | 显示全部楼层
看到这样一句话,当串口中断打开时,在每次调用完printf()和puts()函数后,必须检测是否发送完毕,即检测TI是否为1,当发送完毕后要把TI清零,否则程序就会出错。
这是为什么啊
 楼主| 醉心369 发表于 2013-6-13 11:28 | 显示全部楼层
自己顶一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

60

主题

283

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部