if(psaCommandType == COMMAND_TYPE_CANCLECONSUME){
sprintf(amt,"%012.0lf",Sumdouble);
char filePath[128]="";
char line[256];
char a1,b1;
char a[256][3];
int index1 = -1;
int index2 = -1;
int l=0,i;
a1 = psaAmt;
b1 = psaSeqNo;
sprintf(filePath,"%s/log/trans/trans.rcd8",ANDROID_HOME);
FILE *fp;
if((fp = fopen(filePath,"r")) == NULL)
{
printf("can't open file\n");
}
while (!feof(fp) && !ferror(fp)) {
strcpy(line, "\n");
fgets(line, sizeof(line), fp);
DBG_PRINTF(DBG_HERE,"%s",line);
char *arr[20];
const char *del = "|";
split(arr, line, del);
//这里直接导致so库崩溃了
strcpy(a[l][0],(char)l);
strcpy(a[l][1],*(arr + 3));
strcpy(a[l][2],*(arr + 5));
DBG_PRINTF(DBG_HERE,"line:%d,amt:%s,hao:%s\n",l,a[l][1],a[l][2]);
DBG_PRINTF(DBG_HERE,"line:%d,amt1:%s,hao1:%s\n",l,a1,b1);
l++;
}
DBG_PRINTF(DBG_HERE,"bj5\n");
for(i=0;i<l;i++){
if(strcmp(a[i][2],b1) == 0){
index1 = i;
}
}
if(index1 == -1){
//输出错误信息:匹配不到批次号
}else{
if(strcmp(a[index1][2],a1) == 0){
index2 = 0;
}
}
if(index2 == -1){
//输出错误信息:金额不正确
}else{
tmp=AssemblePackage(buff,psaSeqNo,tmp);
}
fclose(fp);
}
你这不能用strcpy,就是字符赋值啊。a[l][0] = l就好了
大佬们,帮我看看这个,运行到strcpy(a[l][0],(char)l);
strcpy(a[l][1],(arr + 3));
strcpy(a[l][2],(arr + 5));直接so库崩溃了
你全程没做非空判断啊
既然你做的是so库,就必须考虑到各种情况,那不是你自己测试环境,自己能保证数值肯定在定义的范围内
万一调用你的程序给你传入的太长了,太短了,为空了,你不就崩溃了
-=-=-
还有,自己测试好了,能运行了,再编译成so库去使用