搜索
bottom↓
回复: 6

GCC中指针函数的问题,请

[复制链接]

出0入0汤圆

发表于 2008-1-21 13:55:30 | 显示全部楼层 |阅读模式
在mega8中做AD转换后得到的数据送到液晶1602中显示,我自己写了一个指针函数把AD里读得的数据转换成ASCII码,但是那个指针函数老是有问题.指针函数如下:

返回的是地址是转换后字符串的首地址.

unsigned char *adget_to_lcd(unsigned long data_value)
{  
   volatile   unsigned char *str;
   unsigned char temp[5] = {0, 0, 0, 0};
   unsigned char j = 0 ;
   unsigned char k ;
  

    do//将data_value从低到高逐位存入temp数组中   
    {   
        temp[j] = data_value%10 + '0';
        j++;   
    }while ((unsigned) (data_value/=10));
    temp[j]='\0';
       
    for (k=j;k>0;k--)    //将存入的数按正确顺序存到指向str单元中。
    {   
       *str = temp[k];
        str++;   
    }   
    *str='\0';
    return  str;
}  

但是有以下警告:

main.c: In function `adget_to_lcd':
main.c:41: warning: return discards qualifiers from pointer target type
main.c:21: warning: 'str' might be used uninitialized in this function

而且整个程序不能正常工作,我用的GCC编译器是 20070525版的.本来用库函数也可以实现上述功能,但是库函数生成的代码量太多了.接触单片机的时间还不长,

出0入0汤圆

发表于 2008-1-21 14:29:28 | 显示全部楼层
main.c:21: warning: 'str' might be used uninitialized in this function
很能说明问题了。建议楼主用软件仿真方式自己用几个参数测试下这个函数,逻辑错误和溢出问题。
另外,unsigned在gcc中默认范围,及转为字符串的数组所需长度的关系。

出0入0汤圆

 楼主| 发表于 2008-1-21 17:01:51 | 显示全部楼层
谢谢楼上的回答,又弄了一下,但到目前为止还是没有搞定.

出0入0汤圆

发表于 2008-1-21 17:09:14 | 显示全部楼层
str是个wild pointer,没有初值,不知道指向哪儿,这样的程序会崩溃的。

出0入0汤圆

发表于 2008-1-21 17:12:23 | 显示全部楼层
如果你一定要写,可以这么写:

unsigned char *adget_to_lcd(unsigned long data_value,char *buf)
{
   char *str = buf;
   ...
   *str = ...
   ...
   return buf;
}
int main()
{
   char g_buf[10];
   LCD_Write(adget_to_lcd(1234,g_buf));
   
}

出0入0汤圆

 楼主| 发表于 2008-1-21 21:26:57 | 显示全部楼层
现在已经好了,非常感谢楼上的回答!!!是啊, 我怎么就没有想到是野指针呢.受教了.

出0入296汤圆

发表于 2008-1-26 02:21:33 | 显示全部楼层
哈哈,可以看看DEMO中关于指针的章节哈。野指针很可怕的哦。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-9 04:22

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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