存地址实现组包逻辑的一个测试代码。

简介: 存地址实现组包逻辑的一个测试代码。

汇总:柔性数组配合指针数组的方式,实现组包的逻辑的测试。

保存了收到的包,可以扩展结构体,对收到的包做处理。

在业务功能代码的实现中,涉及到组包的逻辑:

第一想法想到定义指针数组,用指针数组来实现包的判断以及重组。

配合结构体的柔性数组特性,这里尝试了一下实现方案:

1:我可以保存每个包的地址,存储包头信息做校验实现。

涉及到的知识点:如何存储,目标是存储多个指针,个数是不定的(根据头信息解析)
  char**a 是二级指针,其实就是指针的指针,初始化的时候注意不能直接用*a去赋值,要正确初始化。
  char* data[] []的优先级高于*,是一个char* 数组,每个元素存储的都是一个char*
    ==》起始就是指针数组
  其他: 数组指针,起始就是数组的指针,存放了一个数组的地址,+表示了加数组的长度
      char (*pa)[4];    char[4](*pa);

2:这里可以用指针数组,参考柔性数组的逻辑实现我想要的功能:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
///怎么验证一下,存储结构体的指针的方案是对的
typedef struct test_t
{
  int type;
  char data;
}TEST_T;
//如果用data存储结构体的多个地址,是否可行?
typedef struct data_t
{
  TEST_T* data[0];  //指向了数组的首地址  数组的大小由其他元素控制
}DATA_T;
//指针数组
int main()
{
  DATA_T * tt = (DATA_T*)malloc(sizeof(char*)* 3);
  for(int i =0; i<3; i++)
  {
    TEST_T * yy = (TEST_T*)malloc(sizeof(TEST_T));
    yy->type = i;
    tt->data[i] = yy;
  }
  for(int i=0;i<3;i++)
  {
    TEST_T * ret = tt->data[i];//数组的指针  这里如果用地址+1就会出问题
    if(ret == NULL)
    {
      printf("ret is null. %d \n",i);
    }else
    {
      printf("get ret success ret type %d, i %d \n", ret->type, i);
      free(ret);
      ret = NULL;
    }
  }
  if(tt != NULL)
  {
    printf("free tt \n");
    free(tt);
    tt = NULL;
  }
  return 0;
}

3:指针其实就是地址,操作系统中地址的长度是固定的,

我试了一下,64位都是8字节,那么,是不是可以涉及通用一点的处理?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
///怎么验证一下,存储结构体的指针的方案是对的
typedef struct test_t
{
  int type;
  char data;
}TEST_T;
//如果用data存储结构体的多个地址,是否可行?
typedef struct data_t
{
  char* data[0];  //指向了数组的首地址  数组的大小由其他元素控制
}DATA_T;
//指针数组
int main()
{
  DATA_T * tt = (DATA_T*)malloc(sizeof(char*)* 3);
  for(int i =0; i<3; i++)
  {
    TEST_T * yy = (TEST_T*)malloc(sizeof(TEST_T));
    yy->type = i;
    tt->data[i] = (char*)yy;
  }
  for(int i=0;i<3;i++)
  {
    TEST_T * ret = (TEST_T *)tt->data[i]; //数组的指针  这里如果用地址+1就会出问题
    if(ret == NULL)
    {
      printf("ret is null. %d \n",i);
    }else
    {
      printf("get ret success ret type %d, i %d \n", ret->type, i);
      free(ret);
      ret = NULL;
    }
  }
  if(tt != NULL)
  {
    printf("free tt \n");
    free(tt);
    tt = NULL;
  }
  return 0;
}
目录
相关文章
|
11月前
|
数据采集 机器学习/深度学习 大数据
行为检测代码(一):超详细介绍C3D架构训练+测试步骤
这篇文章详细介绍了C3D架构在行为检测领域的应用,包括训练和测试步骤,使用UCF101数据集进行演示。
339 1
行为检测代码(一):超详细介绍C3D架构训练+测试步骤
|
1月前
|
算法 IDE Java
Java 项目实战之实际代码实现与测试调试全过程详解
本文详细讲解了Java项目的实战开发流程,涵盖项目创建、代码实现(如计算器与汉诺塔问题)、单元测试(使用JUnit)及调试技巧(如断点调试与异常排查),帮助开发者掌握从编码到测试调试的完整技能,提升Java开发实战能力。
223 0
|
2月前
|
安全 Java 测试技术
Java 项目实战中现代技术栈下代码实现与测试调试的完整流程
本文介绍基于Java 17和Spring技术栈的现代化项目开发实践。项目采用Gradle构建工具,实现模块化DDD分层架构,结合Spring WebFlux开发响应式API,并应用Record、Sealed Class等新特性。测试策略涵盖JUnit单元测试和Testcontainers集成测试,通过JFR和OpenTelemetry实现性能监控。部署阶段采用Docker容器化和Kubernetes编排,同时展示异步处理和反应式编程的性能优化。整套方案体现了现代Java开发的最佳实践,包括代码实现、测试调试
118 0
|
5月前
|
存储 jenkins 测试技术
Apipost自动化测试:零代码!3步搞定!
传统手动测试耗时低效且易遗漏,全球Top 10科技公司中90%已转向自动化测试。Apipost无需代码,三步实现全流程自动化测试,支持小白快速上手。功能涵盖接口测试、性能压测与数据驱动,并提供动态数据提取、CICD集成等优势,助力高效测试全场景覆盖。通过拖拽编排、一键CLI生成,无缝对接Jenkins、GitHub Actions,提升测试效率与准确性。
391 11
|
5月前
|
人工智能 自然语言处理 测试技术
自然语言生成代码一键搞定!Codex CLI:OpenAI开源终端AI编程助手,代码重构+测试全自动
Codex CLI是OpenAI推出的轻量级AI编程智能体,基于自然语言指令帮助开发者高效生成代码、执行文件操作和进行版本控制,支持代码生成、重构、测试及数据库迁移等功能。
772 0
自然语言生成代码一键搞定!Codex CLI:OpenAI开源终端AI编程助手,代码重构+测试全自动
|
11月前
|
机器学习/深度学习 人工智能 监控
提升软件质量的关键路径:高效测试策略与实践在软件开发的宇宙中,每一行代码都如同星辰般璀璨,而将这些星辰编织成星系的过程,则依赖于严谨而高效的测试策略。本文将引领读者探索软件测试的奥秘,揭示如何通过精心设计的测试方案,不仅提升软件的性能与稳定性,还能加速产品上市的步伐,最终实现质量与效率的双重飞跃。
在软件工程的浩瀚星海中,测试不仅是发现缺陷的放大镜,更是保障软件质量的坚固防线。本文旨在探讨一种高效且创新的软件测试策略框架,它融合了传统方法的精髓与现代技术的突破,旨在为软件开发团队提供一套系统化、可执行性强的测试指引。我们将从测试规划的起点出发,沿着测试设计、执行、反馈再到持续优化的轨迹,逐步展开论述。每一步都强调实用性与前瞻性相结合,确保测试活动能够紧跟软件开发的步伐,及时适应变化,有效应对各种挑战。
|
7月前
|
人工智能 自然语言处理 测试技术
Potpie.ai:比Copilot更狠!这个AI直接接管项目代码,自动Debug+测试+开发全搞定
Potpie.ai 是一个基于 AI 技术的开源平台,能够为代码库创建定制化的工程代理,自动化代码分析、测试和开发任务。
560 19
Potpie.ai:比Copilot更狠!这个AI直接接管项目代码,自动Debug+测试+开发全搞定
|
8月前
|
前端开发 JavaScript 测试技术
使用ChatGPT生成登录产品代码的测试用例和测试脚本
使用ChatGPT生成登录产品代码的测试用例和测试脚本
214 35
|
12月前
|
Web App开发 JavaScript 前端开发
添加浮动按钮点击滚动到网页底部的纯JavaScript演示代码 IE9、11,Maxthon 1.6.7,Firefox30、31,360极速浏览器7.5.3.308下测试正常
添加浮动按钮点击滚动到网页底部的纯JavaScript演示代码 IE9、11,Maxthon 1.6.7,Firefox30、31,360极速浏览器7.5.3.308下测试正常
|
8月前
|
JavaScript 前端开发 Java
使用ChatGPT生成关于登录产品代码的单元测试代码
使用ChatGPT生成关于登录产品代码的单元测试代码
115 16