我有以下声明: -
char szsrcBuf[10000]; /* stores main bufer */
int iOff2Verify; /* offset to start of verify area*/
int iLen2Verify; /* length of data to verify */
现在,当我使用以下参数调用该函数时: -
/* process data to verify */
if ((iRet = Verify_Mid(&mach, (char *)(szsrcBuf + (int)iOff2Verify),
iLen2Verify)) != 0)
break;
Verify_Mid()的签名如下: -
int CALLBACK Verify_Mid(bsapi_id *mach, char *inputData, int inputDataLen);
事情很有效。
-------------------上面的xxx是我的第一种编码方式,有效。 XXX ----------------------
然而,我的代码开始变得足够大,我需要重新构建原始调用的功能。所以我拆分了我调用Verify_Mid的部分......如下: -
iRet = Verify_Request(x, y, szsrcBuf, z, &iOff2Verify, iLen2Verify, (char *)abc, &iabcLen);
新助手函数Verify_Request的签名是: -
int CALLBACK Verify_Request(unsigned char *x, int y, unsigned char *szsrcBuf, char *z,
int *iOff2Verify, int iLen2Verify, char *abc, int *iabcLen);
现在在我的Verfiy_Request()中: -
do{
..... stuff....
/* process data to verify */
if ((iRet = Verify_Mid(&mach, (char *)(szsrcBuf + (int)iOff2Verify),
iLen2Verify)) != 0)
break;
.... stuff .....
}while(0);
在此之前一切看起来都不错(显而易见),但是当我转到我的Verfiy_Mid()时,读取第二个参数(char * inputData)时出错...我已经尝试过几个方面我正在传递第二个参数,但无济于事...任何人都可以帮助我理解如何添加偏移量然后将其作为参数正确传递给我的下一个函数吗?
答案 0 :(得分:2)
您正在传递iOff2Verify
作为指向函数Verify_Request(...);
因此,为了实际传递存储在该指针中的数据,您对Verify_Mid(...)
的调用也需要反映出来。
do{
/* process data to verify */
if ((iRet = Verify_Mid(&mach, (char *)(szsrcBuf + (*iOff2Verify)),
iLen2Verify)) != 0)
break;
}while(0);
顺便说一句,如果你不需要在iOff2Verify
中更改Verify_Request
的值,则不需要将其作为指针传递,只需常规int即可。除了指针调试的所有麻烦,这通常只是纯粹的地狱