You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 22:54:54