strcpy导致c语言编译出来的so库闪退


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库去使用