栽在指针的指针上

来源:互联网 发布:类似海报拼图软件 编辑:程序博客网 时间:2024/05/16 05:01

今天在项目中,测试人员告诉我有个模块输出的数据不正确。怎么可能?!我查遍了代码没发现问题,以下是代码:
  1. unsigned char TAX_QUERYSAuditRecord(
  2.         unsigned char *StartTime,
  3.         unsigned char *EndTime,
  4.         unsigned char ucAuditType,
  5.         unsigned long *pulAuditDataLen,
  6.         struct SAuditRecord *pAuditData,
  7.         unsigned char *Password)
  8. {
  9.      StoB(StartTime,8,INBuff_Body);
  10.      StoB(EndTime,8,&INBuff_Body[4]);
  11.      INBuff_Body[8] = ucAuditType;
  12.     
  13.      INCMD_Len = (unsigned char)strlen((char*)Password);
  14.      StoB(Password, INCMD_Len, &INBuff_Body[9]);
  15.      INCMD_Len = INCMD_Len / 2 + 9;
  16.    
  17.     FP_Error = FCR_AUDIT_Query(0,INBuff_Body,INCMD_Len);
  18.         if(FP_Error != 0)    return FP_Error;
  19.         *pulAuditDataLen = OUTBuff_Len;
  20.         pAuditData = (struct SAuditRecord *)OUTBuff;
  21.     return 0;
  22. }
后来通过打印调试的方法,发现pAuditData的值竟然是NULL!不可能,这是怎么回事?我百思不得其解。
后来猛地一下想起来要想把指针的地址传出去只能使用指针的指针。后来经测试果然成功。呵呵看来还是基本功不扎实呀。
下面是修改后的代码:
  1. unsigned char TAX_QUERYSAuditRecord(
  2.         unsigned char *StartTime,
  3.         unsigned char *EndTime,
  4.         unsigned char ucAuditType, 
  5.         unsigned long *pulAuditDataLen,
  6.         struct SAuditRecord **pAuditData,
  7.         unsigned char *Password)
  8. {
  9.     StoB(StartTime,8,INBuff_Body);
  10.     StoB(EndTime,8,&INBuff_Body[4]);
  11.     INBuff_Body[8] = ucAuditType;
  12.     
  13.     INCMD_Len = (unsigned char)strlen((char*)Password);
  14.     StoB(Password, INCMD_Len, &INBuff_Body[9]);
  15.     INCMD_Len = INCMD_Len / 2 + 9;
  16.     
  17.     FP_Error = FCR_AUDIT_Query(0,INBuff_Body,INCMD_Len);
  18.         if(FP_Error != 0)   return FP_Error;
  19.         *pulAuditDataLen = OUTBuff_Len;
  20.         *pAuditData = (struct SAuditRecord *)&OUTBuff;
  21.     return 0;

原创粉丝点击