OLED实验,OLED_ShowString函数不理解

2019-07-20 20:10发布

本帖最后由 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所指地址的内容不再' '与'~'之间呢
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
xiaokun
1楼-- · 2019-07-21 02:27
 精彩回答 2  元偷偷看……
xuande
2楼-- · 2019-07-20 23:25
 精彩回答 2  元偷偷看……
xiaokun
3楼-- · 2019-07-21 00:40
xuande 发表于 2016-9-9 22:32
奇怪,为什么这么问,
while的条件不就在做判断吗?

我知道while做出判断了,奇怪的是执行完K之后,p++,此时p指针所指地址的内容(即*p的值)

刚才请教了实验室一个前辈,他告诉我任何编译器执行完之后,*p的值就是空字符“NULL”(0x00),这里表示不解
xuande
4楼-- · 2019-07-21 05:59

明白你意思了,
如果只写了5个字符,但第6个位置可能也合法,
是吗?

这段程序可能有bug,没有指明字符的数量,
也可能是用于特定环境。

如果不想显示第6个,看来只能往里面填非法数据,然后程序跳出。

xiaokun
5楼-- · 2019-07-21 10:32
xuande 发表于 2016-9-9 23:10
明白你意思了,
如果只写了5个字符,但第6个位置可能也合法,
是吗?

是这个意思,就是想判断字符串最后一个字符显示之后的*p的值
xiaokun
6楼-- · 2019-07-21 14:14
@正点原子 原子哥,求助

一周热门 更多>