4758|8

68

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

关于格式转换函数sprintf(): [复制链接]

关于格式转换函数sprintf():
我想用sprintf()函数将一个usigned int型变量转换为字符串从串口发送出去 结果调用的时候发现不对

我先定义DeocdeNum=2000;UCHAR *CH 保存转换后的字符串

printf(ch,"%d",DeocdeNum);

结果我发现在程序中 DeocdeNum为16进制 07d0 经过函数后 CH应该为ASCII码对应的2000但实际却为一个莫名其妙的数3503

请问各位大侠 怎么回事呢  我换了 %c  %x 都不行

最新回复

哦原来这样 我试试  详情 回复 发表于 2007-10-11 14:35
点赞 关注

回复
举报

71

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
uchar cString[10];//转换字符数据
uchar *cPiont;
...
cPiont = cString;
sprintf(cPiont,"%d",DeocdeNum);
...
LZ是不是这样用的?这样用是没有问题的!你的CH是不是已经初始化过的啊?
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
我已经解决这个问题了 没调用C的库 自己编了一个 因为我的数只会在1000~3000呢变化  所以没写通用的程序  只适合我的四位数uint型的转换程序 很简单啦  另外 sprintf 还是不太会用 我在 tc2.0里都行 一到51  还是不对 唉
uchar *IntToStr(uint Num)
{        uchar ch[5];
        ch[0]=Num/1000+0x30;
        ch[1]=Num%1000/100+0x30;
        ch[2]=Num%100/10+0x30;
        ch[3]=Num%10+0x30;
        ch[4]=0x00;
        return(ch);
}


/*-----------字符串转换为整型值--------
uint StrToInt(uchar ch[])
{        uint Num;
        Num=(ch[0]-0x30)*1000;
        Num+=(ch[1]-0x30)*100;
        Num+=(ch[2]-0x30)*10;
        Num+=ch[3]-0x30;
        return(Num);
}
-----------------------------------------*/
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

4
 
uchar *IntToStr(uint Num)
{        uchar ch[5];
        ch[0]=Num/1000+0x30;
        ch[1]=Num%1000/100+0x30;
        ch[2]=Num%100/10+0x30;
        ch[3]=Num%10+0x30;
        ch[4]=0x00;
        return(ch);
}
LZ这个程序肯定是有问题,返回的ch是个临时的内存,结果会不对的,可能偶尔是对的,会不稳定的!

IntToStr(uint Num, uchar ch[5];)
{       
        ch[0]=Num/1000+0x30;
        ch[1]=Num%1000/100+0x30;
        ch[2]=Num%100/10+0x30;
        ch[3]=Num%10+0x30;
        ch[4]=0x00;
}
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

5
 
什么叫临时的内存? 为什么会不稳定呢
 
 
 

回复

62

帖子

0

TA的资源

一粒金砂(初级)

6
 
比如
UCHAR *CH1;
UCHAR *CH2
CH1 = *IntToStr( 1000 );
CH2 = *IntToStr( 2000 );
就要出错,
或是
CH1 = *IntToStr( 1000 );
在调用一个大量消耗内存的函数CH1的植可能会变。
。。。。

函数内部定义的数据(除了静态型的)是动态分配的。那个CH[5]很有可能在调用下一个函数的时候又被分配给使用了,这样就会改掉其内容。我怀疑你使用sprintf()肯定也是使用的没有初始化的指针造成的,指针在使用之前一定要初始化,比如要指向全局变量,或是静态变量。看看函数那一节书吧?
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

7
 
UCHAR *CH ;
sprintf(ch,"%d",DeocdeNum);

CH没有分配空间,你写哪去了?

请详见指针一节
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

8
 
指针没有初始化啊
UCHAR *pCh,ucTemp[7];
pCh = ucTemp;
sprintf(ch,"%d",DeocdeNum);
 
 
 

回复

67

帖子

0

TA的资源

禁止访问

9
 
提示: 作者被禁止或删除 内容自动屏蔽
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表