栽在指针的指针上

本文介绍了一次在项目中遇到的指针传递错误问题及解决过程。起初由于未正确使用指针的指针导致返回数据为空,通过调试发现并改正问题,最终实现正确数据返回。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


今天在项目中,测试人员告诉我有个模块输出的数据不正确。怎么可能?!我查遍了代码没发现问题,以下是代码:
  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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值