Chenxg 发表于 2008-1-21 13:55:30

GCC中指针函数的问题,请

在mega8中做AD转换后得到的数据送到液晶1602中显示,我自己写了一个指针函数把AD里读得的数据转换成ASCII码,但是那个指针函数老是有问题.指针函数如下:

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

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


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

但是有以下警告:

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版的.本来用库函数也可以实现上述功能,但是库函数生成的代码量太多了.接触单片机的时间还不长,

yyccaa 发表于 2008-1-21 14:29:28

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

Chenxg 发表于 2008-1-21 17:01:51

谢谢楼上的回答,又弄了一下,但到目前为止还是没有搞定.

shark 发表于 2008-1-21 17:09:14

str是个wild pointer,没有初值,不知道指向哪儿,这样的程序会崩溃的。

shark 发表于 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;
   LCD_Write(adget_to_lcd(1234,g_buf));
   
}

Chenxg 发表于 2008-1-21 21:26:57

现在已经好了,非常感谢楼上的回答!!!是啊, 我怎么就没有想到是野指针呢.受教了.

Gorgon_Meducer 发表于 2008-1-26 02:21:33

哈哈,可以看看DEMO中关于指针的章节哈。野指针很可怕的哦。
页: [1]
查看完整版本: GCC中指针函数的问题,请