hanyuan72 发表于 2010-6-1 16:07:40

Lr中的for循环越界问题

update:原来的代码因为转码的原因去掉了方括号,更新为

LR脚本如下:
----------------------------------------------------------
Action()
{
int i;

char j;
int count=10;

//循环1:i最大为10
for (i=1;i<=10;i++) {
sprintf(j,"abc",i);
lr_output_message("√ j%d=%s\n",i,lr_eval_string(j));
}

//循环2:i最大为11
for (i=1;i<=count;i++) {
sprintf(j,"abc",i);
lr_output_message("× j%d=%s\n",i,lr_eval_string(j));
}
return 0;
}
----------------------------------------------------------
这是简化后的脚本 ,问题是:为什么加了变量的循环会越界
脚本说明:
通过循环对数组赋值,循环用常量赋值则一切正常,如用自定义变量则会越界,比如上例中count=10,结果存在i=11的情况,这时lr会报错
——难道是C语言编译器的问题?这样的结果岂不是不能用变量做for边界?
以上脚本可以贴到action中直接运行,有兴趣的可以试试,欢迎高手解惑:)

-----------------------------------------Ps:我的运行结果--------------------------------
Virtual User Script started
Starting action vuser_init.
Web Turbo Replay of LoadRunner 8.1.0 for WIN2003; Web build 4788
Run-Time Settings file: "C:\Documents and Settings\robin\Local Settings\Temp\noname4\\default.cfg"
Ending action vuser_init.
Running Vuser...
Starting iteration 1.
Starting action Action.
Action.c(8): √ j1=abc
Action.c(8): √ j2=abc
Action.c(8): √ j3=abc
Action.c(8): √ j4=abc
Action.c(8): √ j5=abc
Action.c(8): √ j6=abc
Action.c(8): √ j7=abc
Action.c(8): √ j8=abc
Action.c(8): √ j9=abc
Action.c(8): √ j10=abc
Action.c(14): × j1=abc
Action.c(14): × j2=abc
Action.c(14): × j3=abc
Action.c(14): × j4=abc
Action.c(14): × j5=abc
Action.c(14): × j6=abc
Action.c(14): × j7=abc
Action.c(14): × j8=abc
Action.c(14): × j9=abc
Action.c(14): × j10=abc

Action.c(14): Error: C interpreter run time error: Action.c (14): Error -- memory violation : Exception ACCESS_VIOLATION received.
Action.c(14): Error: An exception was raised while calling invocation function in interpreter extension cciext.dll: System Exceptions: EXCEPTION_ACCESS_VIOLATION.
Ending Vuser...
Starting action vuser_end.
Action.c(14): Notify: CCI trace: Action.c(14): vuser_end()
.
Action.c(14): Notify: CCI trace: pop -> 0
.
Ending action vuser_end.
Vuser Terminated.

[ 本帖最后由 hanyuan72 于 2010-6-3 16:25 编辑 ]

msnshow 发表于 2010-6-1 22:31:45

你改一下 char j;
改为 char j; 就行了

qzj_test 发表于 2010-6-2 08:40:34

啥子东西,还要积分

peag 发表于 2010-6-2 08:54:34

C语言不过关,这样的错误都犯了

xavier_007 发表于 2010-6-2 11:43:10

c的下标是从0开始的,10下标就是第11个元素

a598824322 发表于 2010-6-2 14:08:48

回复 1# 的帖子

基础问题

hanyuan72 发表于 2010-6-3 16:08:09

回复 2# 的帖子

如果说只是0~9和1~10的问题,为何count换成10不越界:)

//循环1:i最大为10
for (i=1;i<=10;i++) {
sprintf(j,"abc",i);
lr_output_message("√ j%d=%s\n",i,lr_eval_string(j));
}

hanyuan72 发表于 2010-6-3 16:18:09

请各位看清楚问题:为何常量不越界,而变量会越界,谢谢:)

请各位看清楚问题:为何常量不越界,而变量会越界,谢谢:)
即使把变量改为count=9,循环改为0~9一样会越界——不是下标问题
for (i=0;i<=count;i++) {
sprintf(j,"abc",i);
lr_output_message("× j%d=%s\n",i,lr_eval_string(j));
}

而同样的写法在C++里是不会越界——也不是C问题
# include "ostream"
int main() {
int i;
char j;
int cnt;
cnt=5;

//循环1:i最大为10
for (i=1;i<=5;i++) {
strcpy(j,"abc");
printf("√ j%d=%s\n",i,j);
}

//循环2:i最大为11
for (i=1;i<=cnt;i++) {
strcpy(j,"abc");
printf("* j%d=%s\n",i,j);
}

return (0);
}

——这是loadrunner的问题!!!

hanyuan72 发表于 2010-6-3 16:19:11

回复 3# 的帖子

要什么积分?不用回复的人付吧?
页: [1]
查看完整版本: Lr中的for循环越界问题