LoadRunner脚本C代码编译报错:operands of = have illegal types错误
问题解决:LoadRunner脚本C代码编译错误及修复
编译错误直接原因
你遇到的operands of = have illegal types 'pointer to char' and 'int'错误,是因为**lr_save_string的参数顺序写反了**。LoadRunner的lr_save_string函数定义为:
int lr_save_string(const char *value, const char *param_name);
它要求第一个参数是要保存的字符串值,第二个是参数名,你写反成lr_save_string(("Paraname"),trimmed);,导致类型不匹配触发编译错误。
额外代码问题及修复
除编译错误外,代码还有两个严重问题:
- 非法调用
free(trimmed):trimString返回的是静态数组static char trimmed[36];的地址,静态内存并非通过malloc/calloc动态分配,不能用free释放,否则会触发内存访问错误。 - 静态数组线程安全问题:LoadRunner默认多线程运行,多个线程会共享这个静态数组,导致字符串内容被覆盖,出现不可预期的结果。
修复后的完整代码
修正后的trimString函数(改用动态分配内存)
char * trimString(char* str) { // 动态分配内存,避免线程安全问题 char *trimmed = (char*)malloc(36 * sizeof(char)); if (trimmed == NULL) { lr_error_message("内存分配失败"); return NULL; } if (strlen(str) > 35) { strncpy(trimmed, str, 35); trimmed[35] = '\0'; // 确保字符串以空字符结尾 } else { strcpy(trimmed, str); } return trimmed; }
修正后的Action代码
Action() { char *trimmed; char *cString; cString = lr_eval_string("{Paraname}"); trimmed = trimString(cString); if (trimmed != NULL) { // 修正lr_save_string的参数顺序 lr_save_string(trimmed, "Paraname"); // 安全释放动态分配的内存 free(trimmed); } return 0; }
关键说明
- 动态分配内存后,必须在使用完后调用
free释放,避免内存泄漏。 - 增加内存分配失败的判断,避免空指针访问导致脚本崩溃。
- 修正
lr_save_string参数顺序后,编译错误会直接消失。
内容的提问来源于stack exchange,提问作者vaibhav23123
相关产品推荐
相关产品推荐

