找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2795|回复: 9
收起左侧

C语言结构体里面的整形数据是否可以转换为字符串输出呢?

[复制链接]
回帖奖励 2 黑币 回复本帖可获得 2 黑币奖励! 每人限 2 次
ID:248659 发表于 2020-3-26 13:05 | 显示全部楼层 |阅读模式
在调rtc的时候遇到了结构体,由于oled在显示个位数字的时候不能自动在前面补零,所以我想到使用sprintf函数转换数据补零,但是实际上,在使用sprintf函数以后,
程序就死在sprintf函数这里了,很是苦恼,有大佬知道这类结构体数据应该如何转换显示吗


//年(24) 月(25) 日(26) 时(27) 分(28) 秒(29) 星(30) 期(31)
        struct tm time;
        time = Time_GetCalendarTime();
        char* year;
        sprintf(year,"%d",time.tm_year );
//        printf(year,"Time: %d-%d-%d   %02d:%02d:%02d \r\n", time.tm_year );
        OLED_ShowNum(8,2,*year,4,16,1); //我只实验了year,如果不使用sprintf函数程序是正常的
        OLED_ShowCHinese(48,2,24);//年
        OLED_ShowNum(64,2,time.tm_mon+1,2,16,1);
        OLED_ShowCHinese(80,2,25);//月
        OLED_ShowNum(96,2,time.tm_mday,2,16,1);
        OLED_ShowCHinese(112,2,26);//日
        OLED_ShowNum(16,6,time.tm_hour,2,16,1);
        OLED_ShowCHinese(32,6,27);//时
        OLED_ShowNum(48,6,time.tm_min,2,16,1);
        OLED_ShowCHinese(64,6,28);        //分
        OLED_ShowNum(80,6,time.tm_sec,2,16,1);
        OLED_ShowCHinese(96,6,29);        //秒


回复

使用道具 举报

ID:470332 发表于 2020-3-26 14:51 | 显示全部楼层
char year[20];
sprintf(year,"%d",time.tm_year )
回复

使用道具 举报

ID:248659 发表于 2020-3-26 20:08 | 显示全部楼层
moluxiyan 发表于 2020-3-26 14:51
char year[20];
sprintf(year,"%d",time.tm_year )

这种的我也尝试过了,这一种的在调用的时候会在oled函数上报错
..\main.c(133): error:  #167: argument of type "char *" is incompatible with parameter of type "u32"
如果给oled显示变量改为数组形式,显示又不对了呢,可能是我程序写蒙了,一直不明白为什么,这个错误我再之前尝试的时候有出现,按照百度的修改好像也无济于事,现在脑阔真的有点嗡嗡的
回复

使用道具 举报

ID:470332 发表于 2020-3-27 09:12 | 显示全部楼层
xda 发表于 2020-3-26 20:08
这种的我也尝试过了,这一种的在调用的时候会在oled函数上报错
..\main.c(133): error:  #167: argument ...

char* year; 没有指向任何内存,直接使用肯定会出错
回复

使用道具 举报

ID:592807 发表于 2020-3-27 10:47 | 显示全部楼层
xda 发表于 2020-3-26 20:08
这种的我也尝试过了,这一种的在调用的时候会在oled函数上报错
..\main.c(133): error:  #167: argument ...

uint8_t year【20】;
sprintf(year,"%d",tim.tm_year);
你的time时一个tm结构体类型的变量,里面有多少变量我不知道,但是你time = Time_FetCalendarTie();什么意思?Time_FetCalendarTie()返回值是结构体变量类型吗?
回复

使用道具 举报

ID:248659 发表于 2020-3-27 12:16 | 显示全部楼层
黄youhui 发表于 2020-3-27 10:47
uint8_t year【20】;
sprintf(year,"%d",tim.tm_year);
你的time时一个tm结构体类型的变量,里面有多 ...

/*******************************************************************************
* Function Name  : Time_GetCalendarTime
* Description    : 从RTC取当前时间的日历时间(struct tm)
* Input          : None
* Output         : None
* Return         : struct tm
* Attention                 : None
*******************************************************************************/
struct tm Time_GetCalendarTime(void)
{
        time_t t_t;
        struct tm t_tm;

        t_t = (time_t)RTC_GetCounter();
        t_tm = Time_ConvUnixToCalendar(t_t);
        return t_tm;
}

这个是哪个函数的全部,里面返回的是结构体的数据
回复

使用道具 举报

ID:248659 发表于 2020-3-27 12:20 | 显示全部楼层
黄youhui 发表于 2020-3-27 10:47
uint8_t year【20】;
sprintf(year,"%d",tim.tm_year);
你的time时一个tm结构体类型的变量,里面有多 ...

time = Time_FetCalendarTie()
这一句按照我的原话应该是 time = Time_GetCalendarTime();
这一句是获取时间的
回复

使用道具 举报

ID:592807 发表于 2020-3-27 13:13 | 显示全部楼层
xda 发表于 2020-3-27 12:20
time = Time_FetCalendarTie()
这一句按照我的原话应该是 time = Time_GetCalendarTime();
这一句是 ...

我用st7541  128128液晶屏显示函数,

st7451 8080

st7451 8080
回复

使用道具 举报

ID:282850 发表于 2020-3-27 15:36 | 显示全部楼层
昨天改了一下几年前写的转换函数 *Long2Str,原理是把Long拆位,每位存入一个Dat[i]中,返回Dat[]的指针。显示函数是接收字符串再拆分显示的。LCD_0816Print(uchar x,uchar y, char *dat),所以Long也就可以顺利显示了。
LCD_0816Print(1,5,"ABCD0345");
LCD_0816Print(3,5,Long2Str(3298784,4));    最后的4是小数的位数
估计得用此方法
回复

使用道具 举报

ID:248659 发表于 2020-3-28 10:56 | 显示全部楼层
黄youhui 发表于 2020-3-27 13:13
我用st7541  128128液晶屏显示函数,

尝试了一下,还是要报错。。。编译不通过
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表