C51中不同memory model对函数返回值产生影响?!
最近工作中碰到很奇怪的一个现象:strstr函数不能正确返回,一个简单的验证程序如下
#include <reg51.h>
#include <string.h>
void delay1s()
{
unsigned char i,j,k;
for(i=46;i;i--)
for(j=140;j;j--)
for(k=152;k;k--)
;
}
main()
{
char s[20]={0x43,0x44,0x0d,0x0a,0x25,0x0d,0x0a};
char l[3]={0x25,0x0d,0x0a};
char *p;
P0=0xff;
delay1s();
p=strstr(s,l);
if(p)
{
P0=0x00;
delay1s();
}
else
{
P0=0x0f;
delay1s();
}
return 0;
}
在variables in data模式下,8个灯全亮,程序能够正确运行
而在在variables in xdata模式下,只亮了4个灯,也就是在s中没有找到l,
这是怎么回事?有哪位仁兄给咱解答下
[解决办法]
你的程序有问题,下面这
char l[3]={0x25,0x0d,0x0a};
应该是
char l[4]={0x25,0x0d,0x0a, 0x00};
你在内部RAM里对了因为碰巧l[3]后面的一个空间里是0x00,放到外部RAM里不是0了,所以就不对了。
另外建议
char s[20]={0x43,0x44,0x0d,0x0a,0x25,0x0d,0x0a};
后面也加上个0,养成习惯好一些。