首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

2012-04-19 
形参和实参数据传递中遇到的问题直接上代码:void ccpCommand(unsigned char *com ){unsigned char a[4]//

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

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字节的?

热点排行