C语言中调用com_read后如何比较结构体关联的两个数组?
数组比较函数实现方案
实现思路
- 先验证两个数组的长度是否一致,长度不同直接判定不匹配
- 长度一致时,逐个对比数组内的每个
uint8_t元素 - 根据对比结果更新结构体中的
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
相关产品推荐
相关产品推荐

