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版的.本来用库函数也可以实现上述功能,但是库函数生成的代码量太多了.接触单片机的时间还不长, main.c:21: warning: 'str' might be used uninitialized in this function
很能说明问题了。建议楼主用软件仿真方式自己用几个参数测试下这个函数,逻辑错误和溢出问题。
另外,unsigned在gcc中默认范围,及转为字符串的数组所需长度的关系。 谢谢楼上的回答,又弄了一下,但到目前为止还是没有搞定. str是个wild pointer,没有初值,不知道指向哪儿,这样的程序会崩溃的。 如果你一定要写,可以这么写:
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));
} 现在已经好了,非常感谢楼上的回答!!!是啊, 我怎么就没有想到是野指针呢.受教了. 哈哈,可以看看DEMO中关于指针的章节哈。野指针很可怕的哦。
页:
[1]