0

I'm looking for converting each ordinal value returned from web_reg using web_convert_param in for loop and do some operations. Below is my code:

char str1[] = "";
web_reg_save_param("fetch", "LB=XXXXX", "RB=YYYYY", "ORD=ALL", LAST);

lr_param_sprintf("c_final_buf", "");

for (k = 1; k <= atoi(lr_eval_string("{fetch_count}")); k++){

        sprintf(str1, "%s", lr_paramarr_idx("fetch",k));

        lr_save_string(str1, "buffer1");

        web_convert_param("buffer1Conv", "SourceString={buffer1}", "SourceEncoding=PLAIN", "TargetEncoding=URL",LAST);

        lr_param_sprintf("c_buffer", "ABC%s=%s&",
                         lr_paramarr_idx("c_param",k), lr_eval_string("{CovPunchVal}"));

        lr_param_sprintf("c_final_buf", "%s%s", lr_eval_string("{c_final_buf}"), lr_eval_string("{c_buffer}"));
    }

By using above code sometime's I am getting MEMORY VIOLATION EXCEPTION at sprintf(str1, "%s", lr_paramarr_idx("fetch",k));. Can someone please suggest how can I achieve above without involving any external variables.

EDIT1: Would like to avoid using lr_paramarr_idx("c_param",k) as well as it may cause memory exceptions during run times as per few online forms.

S.ai
  • 61
  • 3
  • 17

2 Answers2

0

The reason you are getting MEMORY VIOLATION EXCEPTION at sprintf(str1, "%s", lr_paramarr_idx("fetch",k)); may be related to str1 declaration.

It should be fixed size character array like char str1[256]; rather than char str1[] = "";

Also, maybe the follwing code may be of use to you as an alternative:

    int k;    
    int count;

//web_reg_save_param("fetch", "LB=XXXXX", "RB=YYYYY", "ORD=ALL", LAST);

// simulation of parameters array

            lr_save_string("101:abc","fetch_1");
            lr_save_string("102:abc","fetch_2");
            lr_save_string("103:abc","fetch_3");
            lr_save_string("104:abc","fetch_4");
            lr_save_string("105:abc","fetch_5");
            lr_save_string("106:abc","fetch_6");
            lr_save_string("107:abc","fetch_7");
            lr_save_string("108:abc","fetch_8");
            lr_save_string("109:abc","fetch_9");
            lr_save_string("110:abc","fetch_10");
            lr_save_string("111:abc","fetch_11");
            lr_save_string("112:abc","fetch_12");
            lr_save_string("113:abc","fetch_13");
            lr_save_string("114:abc","fetch_14");
            lr_save_string("115:abc","fetch_15");
            lr_save_string("116:abc","fetch_16");
            lr_save_string("117:abc","fetch_17");
            lr_save_string("118:abc","fetch_18");
            lr_save_string("119:abc","fetch_19");
            lr_save_string("120:abc","fetch_20");

            lr_save_string("20","fetch_count");


// convert values inside array            
count =  atoi(lr_eval_string("{fetch_count}"));          

for (k = 1; k <= count; k++){
                lr_save_int(k,"ParamIndex");
                web_convert_param(lr_eval_string("fetch_{ParamIndex}"), "SourceEncoding=PLAIN", "TargetEncoding=URL",LAST);
}

// continue the required manipulations…

Buzzy
  • 2,905
  • 3
  • 22
  • 31
0

Issue got resolved now. Below is the update code:

char tmpbuf[256];
for (k = 1; k <= atoi(lr_eval_string("{fetch_count}")); k++){

        // sprintf(str1, "%s", lr_paramarr_idx("fetch",k));
        // lr_save_string(str1, "buffer1");

        sprintf(tmpbuf, lr_paramarr_idx("fetch",k));

        lr_save_string(tmpbuf, "buffer1");

        web_convert_param("buffer1Conv", "SourceString={buffer1}", "SourceEncoding=PLAIN", "TargetEncoding=URL",LAST);

        lr_param_sprintf("c_buffer", "ABC%s=%s&",
                         lr_paramarr_idx("c_param",k), lr_eval_string("{CovPunchVal}"));

        lr_param_sprintf("c_final_buf", "%s%s", lr_eval_string("{c_final_buf}"), lr_eval_string("{c_buffer}"));
    }

S.ai
  • 61
  • 3
  • 17