当前位置: 首页 > news >正文

C 长度为0 的数组

有时候 C结构体中,成员的长度不固定,需要 malloc分配,比如

typedef struct sinictx{
    FILE* fp;
    int fclen;
    char* fcontent;
}inictx_t;
fcontent 代表文件内容,长度不能固定,上面的写法, 分配的时候这样写:

FILE* fp = fopen("conf.ini", "rb");

int fsize = getfsize(fp);

char* mem = (char*)malloc(sizeof(inictx_t) + fsize );

inictx_t* ctx = (inictx_t*)mem;

ctx->fcontent = mem  + sizeof(inictx_t);

fread(ctx->fcontent, 1, fsize, fp);

....

这样写没毛病。然而还有一种写法你要知道:

typedef struct sinictx{
    FILE* fp;
    int fclen;
    char fcontent[0];
}inictx_t;

此时, sizeof(inictx_t) 为 8,而且 fcontent 指向了 fclen后面的内存,节约了 4个字节,且写起来稍微方便了写=些。

inictx_t* ctx = (inictx_t*)malloc(sizeof(inictx_t) + fsize );

无需再对 fcontent赋值,直接访问 ctx->fcontent 即可

相关文章:

  • javaweb JAVA JSP学生信息档案管理系统JSP学生管理系统JSP学生档案管理系统JSP学生信息管理系统
  • 天玑810和天玑900哪个好 天玑810和天玑900差距
  • 如何管理现代信息化机房
  • 单声道D类音频放大器 CS8631E 特点及应用
  • 【Python】第九课 类和对象
  • WPF中加载GIF
  • 快来直播带你了解中国互联网大厂布局元宇宙现状如何?
  • 配置JVM堆栈大小
  • 新美域杂志新美域杂志社新美域编辑部2022年第6期目录
  • 安卓毕业设计源码基于Uniapp+SSM实现的新闻APP
  • Qt报错: error: C2001: 常量中有换行符,解决QT运行时有中文乱码
  • 数据结构:2.1 .1进程与线程——进程
  • (附源码)springboot助农电商系统 毕业设计 081919
  • Idea debug 调试运行慢
  • PostgreSQL修炼之道笔记之基础篇(六)
  • JavaScript 如何正确处理 Unicode 编码问题!
  • [译] 怎样写一个基础的编译器
  • bearychat的java client
  • CoolViewPager:即刻刷新,自定义边缘效果颜色,双向自动循环,内置垂直切换效果,想要的都在这里...
  • C语言笔记(第一章:C语言编程)
  • ECMAScript6(0):ES6简明参考手册
  • Laravel5.4 Queues队列学习
  • vagrant 添加本地 box 安装 laravel homestead
  • Zepto.js源码学习之二
  • 初识 webpack
  • 手机端车牌号码键盘的vue组件
  • 树莓派 - 使用须知
  • 思维导图—你不知道的JavaScript中卷
  • 正则表达式
  • 长三角G60科创走廊智能驾驶产业联盟揭牌成立,近80家企业助力智能驾驶行业发展 ...
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • (+4)2.2UML建模图
  • (1)(1.9) MSP (version 4.2)
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (2)nginx 安装、启停
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (附源码)spring boot智能服药提醒app 毕业设计 102151
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (一)基于IDEA的JAVA基础1
  • (原+转)Ubuntu16.04软件中心闪退及wifi消失
  • .Net Core 中间件验签
  • .net core开源商城系统源码,支持可视化布局小程序
  • .NET 中什么样的类是可使用 await 异步等待的?
  • .NETCORE 开发登录接口MFA谷歌多因子身份验证
  • .Net高阶异常处理第二篇~~ dump进阶之MiniDumpWriter
  • .NET设计模式(2):单件模式(Singleton Pattern)
  • .net下的富文本编辑器FCKeditor的配置方法
  • /etc/sudoer文件配置简析
  • @Autowired多个相同类型bean装配问题
  • [bzoj 3124][sdoi 2013 省选] 直径
  • [C++11 多线程同步] --- 条件变量的那些坑【条件变量信号丢失和条件变量虚假唤醒(spurious wakeup)】
  • [CUDA手搓]从零开始用C++ CUDA搭建一个卷积神经网络(LeNet),了解神经网络各个层背后算法原理
  • [CVPR2021]Birds of a Feather: Capturing Avian Shape Models from Images
  • [NLP] LlaMa2模型运行在Mac机器
  • [Notice] 朋友们,blog更新http://jiang-hongfei.spaces.live.com