导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→[讨论]Keil,那位大侠用过vsprintf函数?好像有问[菜鸟特]

 *第14065篇: [讨论]Keil,那位大侠用过vsprintf函数?好像有问题呀!

  
楼 主:菜鸟特 2003年7月4日10:17
 [讨论]Keil,那位大侠用过vsprintf函数?好像有问题呀!
我的程序如下,在BC3。0下测试是好的,可是在KEIL下好像有问题。我的程序下载在板子上
也有问题,用keil来debug仿真也看出来有问题。请各位高手解答!

谢谢!


#include   <stdio.h>  
#include   <stdarg.h>  

//#define _EMU_        // bc3.0 build use

#ifdef _EMU_
#define code         const
#define xdata
#endif

void FormatData( char* pszGetData,const char* pszFormat,... )
{
    va_list    ap;

    va_start( ap, pszFormat );
    vsprintf( pszGetData, pszFormat, ap );
    va_end( ap );
}

void main( void )
{
    code unsigned char        bTestData[] = { 
0x00,0x11,0x22,0x33,0x44,0x55 };
    unsigned int            nIntData;
    code char*                pszStr = "This is a 
TEST!";
    xdata char                szTestBuf[1024+1];

    while( 1 )
    {
        // after this,The szTestBuf data is not "Get HEX IS: 00 
11 22 33 44 55",Why?
        FormatData( szTestBuf,"Get HEX IS: %02x %02x %02x %02x %
02x %02x",
        bTestData[0],bTestData[1],bTestData[2],bTestData
[3],bTestData[4],bTestData[5] );
#ifdef _EMU_
        printf( "\n%s\n",szTestBuf );
#endif
        nIntData = 12345;
        FormatData( szTestBuf,"Get INT is: %d Get string is: %
s",nIntData,pszStr );
#ifdef _EMU_
        printf( "%s",szTestBuf );
        break;
#endif
    }
}

  
2楼:菜鸟特 2003年7月4日10:21
 我用的KEIL的版本是7.0
  
3楼:菜鸟特 2003年7月4日11:34
 为什么没有人回答呢?难道大家都不关系KEIL了?
  
4楼:菜鸟特 2003年7月4日13:29
 急呀!大侠们干什么去了?????????
?????????????????????????
  
5楼:龙芯四十三号 2003年7月4日14:19
 我中午帮你看了一下。
// after this,The szTestBuf data is not "Get HEX IS: 00 
11 22 33 44 55",Why?
        FormatData( szTestBuf,"Get HEX IS: %02x %02x %02x %02x %02x %02x",
        bTestData[0],bTestData[1],bTestData[2],bTestData[3],bTestData[4],bTestData[5] );

修改为
FormatData( szTestBuf,"Get HEX IS: %02x %02x %02x %02x %02x %02x",
       (int) bTestData[0], (int)bTestData[1], (int)bTestData[2], (int)bTestData[3], ( int)bTestData[4], (int)bTestData[5] );

因为vspritf和printf的%d参数都为int形,而且编译器不会替你转换。

  
6楼:菜鸟特 2003年7月4日16:30
 谢谢,我们可以讨论讨论!
修改为
FormatData( szTestBuf,"Get HEX IS: %02x %02x %02x %02x %02x %02x",
       (int) bTestData[0], (int)bTestData[1], (int)bTestData[2], (int)bTestData[3], ( int)bTestData[4], (int)bTestData[5] );

这种想法我也试过(我把bCmd[]的类型由BYTE改为int),而且可行。但我认为这个问题是编译器的问题,如果vspritf和printf的%d参数都为int形的话,那么这样给使用者有很大的不便!而且如果类型位int的话那么在函数传递的过程中应该自动进行类型转换,不知为什么没有进行类型转换呢?


  
7楼:菜鸟特 2003年7月4日16:33
 原来如此!
哦,刚刚看了一下KEIL的帮助,发现他们新定义了一种格式:b,如果改成这样就好了!

FormatData( szTestBuf,"Get HEX IS: %b02x %b02x %b02x %b02x %b02x %b02x",
  bTestData[0],bTestData[1],bTestData[2],bTestData[3],bTestData[4],bTestData[5] );

再次感谢【龙芯四十三号】大侠!!!!!!!!!!!!!!!!


>>>>>>对该主题发表你的看法

本主题贴数7,分页: [第1页]


[上一篇主题]:请那位详解堆与栈的区别,并请教再什么情况下才有不要开辟堆空间?

[下一篇主题]:8050和8550的封装形式一样吗?谢谢