读书人

形参和实参数据传递中遇到的有关问题

发布时间: 2012-04-19 14:36:43 作者: rapoo

形参和实参数据传递中遇到的问题
直接上代码:

void ccpCommand(unsigned char *com )
{
unsigned char a[4]; //用于观察形参的值是否正确

a[0]=com[2];
a[1]=com[3];
a[2]=com[4];
a[3]=com[5];

ccp.ProtectionStatus |= ccpUnlock(&com[2]);

}

函数中调用的ccpUnlock函数定义如下:

unsigned char ccpUnlock( unsigned char *key )
{
unsigned long temp;

ccpLastSeed = 0x4f833483;

temp = *(unsigned long *)key;

if ( temp != ccpLastSeed )
{
return 0;
}

return 1;
}

通过观察a数组,发现数组元素的值分别为
a[0]=0x83;
a[1]=0x34;
a[2]=0x83;
a[3]=0x4f;
通过调用ccpUnlock函数,得到的temp应该和ccpLastSeed值相等,都是0x4f833483,返回的应该是1,可是通过观察,
temp的值居然是0,导致函数返回值为0.后面的操作就都错了。

一头雾水啊,求大侠指点~

[解决办法]
temp = *(unsigned long *)key;

改成 *(unsigned char *)key;试试
[解决办法]
楼主试了2楼的建议没?
[解决办法]

探讨
引用:

ccp.ProtectionStatus |= ccpUnlock(&com[2]);

==>
ccp.ProtectionStatus |= ccpUnlock(&a[0]);
看看结果。
还有:
int val=1;
printf("%c",*(char*)(&val)+'0');
//输出1,小端……

[解决办法]
为什么不用
memcpy(temp,key,4);

就是把key地址中的值赋值给temp地址中,长度为4.
[解决办法]
探讨

很奇怪了,unsigned char ccpUnlock( unsigned char *key )
里面先打印一下key的前4个值都是什么如果都是0,那就是调用函数的问题了

[解决办法]
难不成你用的64位系统?long是8字节的?

读书人网 >C语言

热点推荐