标题: C语言结构体里面的整形数据是否可以转换为字符串输出呢? [打印本页]

作者: xda    时间: 2020-3-26 13:05
标题: C语言结构体里面的整形数据是否可以转换为字符串输出呢?
在调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);        //秒



作者: moluxiyan    时间: 2020-3-26 14:51
char year[20];
sprintf(year,"%d",time.tm_year )
作者: xda    时间: 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显示变量改为数组形式,显示又不对了呢,可能是我程序写蒙了,一直不明白为什么,这个错误我再之前尝试的时候有出现,按照百度的修改好像也无济于事,现在脑阔真的有点嗡嗡的
作者: moluxiyan    时间: 2020-3-27 09:12
xda 发表于 2020-3-26 20:08
这种的我也尝试过了,这一种的在调用的时候会在oled函数上报错
..\main.c(133): error:  #167: argument ...

char* year; 没有指向任何内存,直接使用肯定会出错
作者: 黄youhui    时间: 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()返回值是结构体变量类型吗?
作者: xda    时间: 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;
}

这个是哪个函数的全部,里面返回的是结构体的数据
作者: xda    时间: 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();
这一句是获取时间的
作者: 黄youhui    时间: 2020-3-27 13:13
xda 发表于 2020-3-27 12:20
time = Time_FetCalendarTie()
这一句按照我的原话应该是 time = Time_GetCalendarTime();
这一句是 ...

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

TH.png (5.18 KB, 下载次数: 28)

st7451 8080

st7451 8080

作者: f556    时间: 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是小数的位数
估计得用此方法
作者: xda    时间: 2020-3-28 10:56
黄youhui 发表于 2020-3-27 13:13
我用st7541  128128液晶屏显示函数,

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




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1