C - 在 Linux 上传递给另一个函数时改变 char * 值

问题描述 投票:0回答:0

我们有一个带有 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);

怎么了?

c linux pointers
© www.soinside.com 2019 - 2024. All rights reserved.