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

C语言中调用com_read后如何比较结构体关联的两个数组?

数组比较函数实现方案

实现思路

  1. 先验证两个数组的长度是否一致,长度不同直接判定不匹配
  2. 长度一致时,逐个对比数组内的每个uint8_t元素
  3. 根据对比结果更新结构体中的dr_result_t状态

具体代码实现

首先添加数组比较函数:

// 比较两个缓冲区内容的函数,传入dr_config_data指针
void compare_buffers(dr_config_data* config) {
    // 初始化结果为失败状态
    config->result.dr_assert = test_failure;
    config->result.dr_fail = test_success;

    // 先检查两个缓冲区大小是否一致
    if (config->Firstbuff_size != config->Secondbuff_size) {
        return; // 大小不等,直接返回失败状态
    }

    // 逐个元素比较
    for (uint16_t i = 0; i < config->Firstbuff_size; i++) {
        if (config->Firstbuff[i] != config->Secondbuff[i]) {
            return; // 发现不匹配元素,返回失败状态
        }
    }

    // 所有元素匹配,更新为成功状态
    config->result.dr_assert = test_success;
    config->result.dr_fail = test_failure;
}

然后修改main函数,在调用com_read后执行比较逻辑:

int main() {
    int result = 0;
    dr_result_t result2;
    dr_config_data* config = &readDATA[0].initconfig;

    // 调用com_read填充array2
    result = com_read(0, config);
    if (result != test_success) {
        printf("com_read failed!\n");
        return 1;
    }

    // 调用比较函数对比array和array2
    compare_buffers(config);

    // 获取预期结果和实际比较结果
    result2 = readDATA[0].expectedResult;
    printf("Expected assert result: %d\n", result2.dr_assert);
    printf("Comparison assert result: %d\n", config->result.dr_assert);
    printf("Comparison fail result: %d\n", config->result.dr_fail);

    return 0;
}

关键说明

  • 结构体成员访问:通过config->Firstbuff可直接获取指向array的指针,config->Firstbuff_size对应数组长度;config->Secondbuff和config->Secondbuff_size对应array2的指针与长度
  • 比较函数直接操作传入的dr_config_data结构体,更新其内部的result成员,无需额外返回值(也可改成返回bool值,按需调整)
  • 原代码中printf("result2 = %d\n", result2);存在错误:result2是dr_result_t结构体,不能直接打印,需访问其具体成员(如dr_assert)

补充优化点

如果需要定位具体不匹配的位置,可在比较函数中添加日志输出:

// 在发现不匹配时添加
printf("Mismatch at index %u: 0x%02X vs 0x%02X\n", i, config->Firstbuff[i], config->Secondbuff[i]);

内容的提问来源于stack exchange,提问作者pekoms

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 06:25:38