今天在项目中,测试人员告诉我有个模块输出的数据不正确。怎么可能?!我查遍了代码没发现问题,以下是代码:
- unsigned char TAX_QUERYSAuditRecord(
- unsigned char *StartTime,
- unsigned char *EndTime,
- unsigned char ucAuditType,
- unsigned long *pulAuditDataLen,
- struct SAuditRecord *pAuditData,
- unsigned char *Password)
- {
- StoB(StartTime,8,INBuff_Body);
- StoB(EndTime,8,&INBuff_Body[4]);
- INBuff_Body[8] = ucAuditType;
- INCMD_Len = (unsigned char)strlen((char*)Password);
- StoB(Password, INCMD_Len, &INBuff_Body[9]);
- INCMD_Len = INCMD_Len / 2 + 9;
- FP_Error = FCR_AUDIT_Query(0,INBuff_Body,INCMD_Len);
- if(FP_Error != 0) return FP_Error;
- *pulAuditDataLen = OUTBuff_Len;
- pAuditData = (struct SAuditRecord *)OUTBuff;
- return 0;
- }
后来猛地一下想起来要想把指针的地址传出去只能使用指针的指针。后来经测试果然成功。呵呵看来还是基本功不扎实呀。
下面是修改后的代码:
- unsigned char TAX_QUERYSAuditRecord(
- unsigned char *StartTime,
- unsigned char *EndTime,
- unsigned char ucAuditType,
- unsigned long *pulAuditDataLen,
- struct SAuditRecord **pAuditData,
- unsigned char *Password)
- {
- StoB(StartTime,8,INBuff_Body);
- StoB(EndTime,8,&INBuff_Body[4]);
- INBuff_Body[8] = ucAuditType;
- INCMD_Len = (unsigned char)strlen((char*)Password);
- StoB(Password, INCMD_Len, &INBuff_Body[9]);
- INCMD_Len = INCMD_Len / 2 + 9;
- FP_Error = FCR_AUDIT_Query(0,INBuff_Body,INCMD_Len);
- if(FP_Error != 0) return FP_Error;
- *pulAuditDataLen = OUTBuff_Len;
- *pAuditData = (struct SAuditRecord *)&OUTBuff;
- return 0;
- }