本帖最后由 xiaokun 于 2016-9-9 21:47 编辑
OLED实验中,输出字符串函数有点看不懂,贴源代码如下:
//显示字符串
//x,y:起点坐标
//size:字体大小
//*p:字符串起始地址
void OLED_ShowString(u8 x,u8 y,const u8 *p,u8 size)
{
while((*p<='~')&&(*p>=' '))//判断是不是非法字符!
{
if(x>(128-(size/2))){x=0;y+=size;}
if(y>(64-size)){y=x=0;OLED_Clear();}//超屏操作
OLED_ShowChar(x,y,*p,size,1);
x+=size/2;
p++;
}
}
假如我要如下调用此函数:
OLED_ShowString(0,0,"ALIENTEK",24);
在执行此函数到指针变量p指向最后一个字符“K”所在地址之后,p的地址继续+1,然后怎么判断这时p所指地址的内容不再' '与'~'之间呢
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
我知道while做出判断了,奇怪的是执行完K之后,p++,此时p指针所指地址的内容(即*p的值)
刚才请教了实验室一个前辈,他告诉我任何编译器执行完之后,*p的值就是空字符“NULL”(0x00),这里表示不解
明白你意思了,
如果只写了5个字符,但第6个位置可能也合法,
是吗?
这段程序可能有bug,没有指明字符的数量,
也可能是用于特定环境。
如果不想显示第6个,看来只能往里面填非法数据,然后程序跳出。
是这个意思,就是想判断字符串最后一个字符显示之后的*p的值
一周热门 更多>