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

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

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

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

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

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

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

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;
}
目录
相关文章
|
2月前
|
数据采集 机器学习/深度学习 大数据
行为检测代码(一):超详细介绍C3D架构训练+测试步骤
这篇文章详细介绍了C3D架构在行为检测领域的应用,包括训练和测试步骤,使用UCF101数据集进行演示。
80 1
行为检测代码(一):超详细介绍C3D架构训练+测试步骤
|
2月前
|
机器学习/深度学习 人工智能 监控
提升软件质量的关键路径:高效测试策略与实践在软件开发的宇宙中,每一行代码都如同星辰般璀璨,而将这些星辰编织成星系的过程,则依赖于严谨而高效的测试策略。本文将引领读者探索软件测试的奥秘,揭示如何通过精心设计的测试方案,不仅提升软件的性能与稳定性,还能加速产品上市的步伐,最终实现质量与效率的双重飞跃。
在软件工程的浩瀚星海中,测试不仅是发现缺陷的放大镜,更是保障软件质量的坚固防线。本文旨在探讨一种高效且创新的软件测试策略框架,它融合了传统方法的精髓与现代技术的突破,旨在为软件开发团队提供一套系统化、可执行性强的测试指引。我们将从测试规划的起点出发,沿着测试设计、执行、反馈再到持续优化的轨迹,逐步展开论述。每一步都强调实用性与前瞻性相结合,确保测试活动能够紧跟软件开发的步伐,及时适应变化,有效应对各种挑战。
|
3月前
|
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下测试正常
|
27天前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
61 1
|
28天前
|
存储 算法 C语言
用C语言开发游戏的实践过程,包括选择游戏类型、设计游戏框架、实现图形界面、游戏逻辑、调整游戏难度、添加音效音乐、性能优化、测试调试等内容
本文探讨了用C语言开发游戏的实践过程,包括选择游戏类型、设计游戏框架、实现图形界面、游戏逻辑、调整游戏难度、添加音效音乐、性能优化、测试调试等内容,旨在为开发者提供全面的指导和灵感。
45 2
|
2月前
|
自然语言处理 机器人 Python
ChatGPT使用学习:ChatPaper安装到测试详细教程(一文包会)
ChatPaper是一个基于文本生成技术的智能研究论文工具,能够根据用户输入进行智能回复和互动。它支持快速下载、阅读论文,并通过分析论文的关键信息帮助用户判断是否需要深入了解。用户可以通过命令行或网页界面操作,进行论文搜索、下载、总结等。
71 1
ChatGPT使用学习:ChatPaper安装到测试详细教程(一文包会)
|
2月前
|
SQL 分布式计算 Hadoop
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(一)
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(一)
57 4
|
2月前
|
SQL
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(二)
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(二)
43 2
|
3月前
|
SQL JavaScript 前端开发
基于Python访问Hive的pytest测试代码实现
根据《用Java、Python来开发Hive应用》一文,建立了使用Python、来开发Hive应用的方法,产生的代码如下
83 6
基于Python访问Hive的pytest测试代码实现
|
3月前
|
Java C++
代码文件间重复性测试
本文介绍了如何使用代码相似性检测工具simian来找出代码文件中的重复行,并通过示例指令展示了如何将检测结果输出到指定的文本文件中。

热门文章

最新文章