我们有一个带有 JNI 调用的应用程序。我在 Java 和 C 中向输入结构添加了几个新字段,并且我将该 C 结构与
char *
一起传递给函数 matchResults
,该函数调用另一个函数 getReults
。在调用 getReults
之后,char *
(countsBlob
) 的值出乎意料地不同(一些初始值,最初为 0,被替换为 SPACES)。我在 Linux 上观察到这种不当行为,但在 Windows 上没有。
typedef struct
{
char name;
char address[100+1];
char city[100+1];
char state[50+1];
char processMode; // added new
char zip[11+1];
char age[2+1];
char status; // added new
char exist; // added new
} FIXED_INPUT;
typedef struct
{
// some char's
} FIXED_OUT;
void matchResults(FIXED_INPUT *resultInput, FIXED_RESULT_OUT *resultOutput, char *countsBlob)
{
long lResult;
lResult = getReults(resultInput, resultOutput);
if (countsBlob != NULL)
{
// countsBlob is of size 1800 and contains 0's
// do some processing
}
}
long getReults(FIXED_INPUT *resultInput, FIXED_RESULT_OUT *resultOutput)
{
long lRet;
char CobIn[CBLIN_SIZE]; // size= 68
char CobOut[CBLOUT_SIZE]; // size = 1000
// function converting parameter from C to COBOL
cToCobol(CobIn, resultInput);
cobolInfo.params = cblargs; // cblargs consist of input, output param and program to call.
//call to COBOL program
lRet = (long) acu_cobol (&cobolInfo);
// function converting parameter from COBOL to C
cobolToC(CobOut, resultOutput);
return lRel;
}
虽然输入的大小也已更新,但无法弄清楚为什么
countsBlob
的值在 Linux 中发生变化。
我在调用
countsBlob
之前尝试创建getReults
的副本,但副本没有改变。
copyCountsBlob = (char*)malloc(strlen(countsBlob) + 1);
strcpy(copyCountsBlob, countsBlob);
怎么了?