打印
[51单片机]

STC15W4K56S单片机sprintf 函数使用有问题

[复制链接]
1691|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ak5136728|  楼主 | 2018-12-6 18:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 ak5136728 于 2018-12-7 09:59 编辑

void main(void)                                                                                                
{        
        float xdata temperatureC= 26.7;
        float xdata humidityRH= 63.5;
        float xdata lightLx=        81.4;

        char xdata        tmpBuf1[100];
           char xdata        tmpBuf2[100];

        printf( "[INFO]SEND DATA IS %2.1f %2.1f %2.1f\r\n", temperatureC, humidityRH, lightLx );
        sprintf( tmpBuf1, "%2.1f%2.1f%2.1f", temperatureC, humidityRH, lightLx);
        printf( "[INFO]Send_Data = %s\r\n",tmpBuf1 );
        while(1)
        {
                          ;
         }
}

预期的效果是将  三个浮点数的数据 整理成字符串放到数组里面 但是 转换后的数据最后一个数有问题,是sprintf 在C51上不支持? 还望高手指点下。
[INFO]SEND DATA IS 27.2 63.5 81.4
[INFO]Send_Data = 27.263.533.5   这个是错误的转换结果





相关帖子

沙发
linqing171| | 2018-12-6 22:05 | 只看该作者
sprintf( tmpBuf1, "%2.1f  %2.1f", temperatureC, humidityRH, lightLx);
三个参数,只有两个百分号啊。

使用特权

评论回复
板凳
ayb_ice| | 2018-12-7 08:33 | 只看该作者
少了一个格式化字符或者多了一个参数

使用特权

评论回复
地板
ak5136728|  楼主 | 2018-12-7 10:00 | 只看该作者
linqing171 发表于 2018-12-6 22:05
sprintf( tmpBuf1, "%2.1f  %2.1f", temperatureC, humidityRH, lightLx);
三个参数,只有两个百分号啊。 ...

改过来了,结果还是 有问题

使用特权

评论回复
5
ak5136728|  楼主 | 2018-12-7 10:00 | 只看该作者
ayb_ice 发表于 2018-12-7 08:33
少了一个格式化字符或者多了一个参数

改过来了,结果还是有问题,

使用特权

评论回复
6
ayb_ice| | 2018-12-7 10:12 | 只看该作者
ak5136728 发表于 2018-12-7 10:00
改过来了,结果还是有问题,

这个与编译模式有关,
不同的模式支持的可变长度参数不同

换成large编译模式肯定可以
小模式需要修改配置,我先看下,好久没搞51了,有点忘记了

使用特权

评论回复
7
ayb_ice| | 2018-12-7 10:22 | 只看该作者
ak5136728 发表于 2018-12-7 10:00
改过来了,结果还是有问题,

The total number of bytes that may be passed to this function is limited due to the memory restrictions imposed by the 8051. A maximum of 15 bytes may be passed in SMALL or COMPACT model. A maximum of 40 bytes may be passed in LARGE model.

这是原文

使用特权

评论回复
8
ak5136728|  楼主 | 2018-12-7 10:28 | 只看该作者
ayb_ice 发表于 2018-12-7 10:22
The total number of bytes that may be passed to this function is limited due to the memory restric ...

谢谢,问题找到了,就是这个问题,小学模式下只能传15个字节导致最后一位出错。谢谢

使用特权

评论回复
9
ayb_ice| | 2018-12-7 10:33 | 只看该作者
ak5136728 发表于 2018-12-7 10:28
谢谢,问题找到了,就是这个问题,小学模式下只能传15个字节导致最后一位出错。谢谢 ...

但应该没有超过15个字节
3个浮点数才12个字节
但肯定是这里有问题,具体原因我也不知道了

使用特权

评论回复
10
linqing171| | 2018-12-7 22:35 | 只看该作者
ayb_ice 发表于 2018-12-7 10:33
但应该没有超过15个字节
3个浮点数才12个字节
但肯定是这里有问题,具体原因我也不知道了 ...

除了三个浮点数,前面还有两个,char*和const char*,这两个算不算?

使用特权

评论回复
11
ayb_ice| | 2018-12-10 08:36 | 只看该作者
linqing171 发表于 2018-12-7 22:35
除了三个浮点数,前面还有两个,char*和const char*,这两个算不算?

一个函数里的调用算,多个函数的不算

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

51

帖子

3

粉丝