C语言变长数组 struct中char data[0]的用法详解

发布时间 - 2026-01-10 22:23:29    点击率:

今天在看一段代码时出现了用结构体实现变长数组的写法,一开始因为忘记了这种技术,所以老觉得作者的源码有误,最后经过我深思之后,终于想起以前看过的用struct实现变长数组的技术。下面是我在网上找到的一篇讲解很清楚的文章。

在实际的编程中,我们经常需要使用变长数组,但是C语言并不支持变长的数组。此时,我们可以使用结构体的方法实现C语言变长数组。

struct MyData { int nLen; char data[0];};

在结构中,data是一个数组名;但该数组没有元素;该数组的真实地址紧随结构体MyData之后,而这个地址就是结构体后面数据的地址(如果给这个结构体分配的内容大于这个结构体实际大小,后面多余的部分就是这个data的内容);这种声明方法可以巧妙的实现C语言里的数组扩展。

实际用时采取这样:

struct MyData *p = (struct MyData *)malloc(sizeof(struct MyData )+strlen(str)) 

这样就可以通过p->data 来操作这个str。

程序实例:

#include <iostream> 
using namespace std; 
struct MyData  
{ 
 int nLen; 
 char data[0]; 
}; 
int main() 
{ 
 int nLen = 10; 
 char str[10] = "123456789"; 
 cout << "Size of MyData: " << sizeof(MyData) << endl; 
 MyData *myData = (MyData*)malloc(sizeof(MyData) + 10); 
 memcpy(myData->data, str, 10); 
 cout << "myData's Data is: " << myData->data << endl; 
 free(myData); 
 return 0; 
}

输出:

Size of MyData: 4

myData"s Data is: 123456789

PS:必须将指针定义在struct的末尾,指针的类型也可以不为char。

以上这篇C语言变长数组 struct中char data[0]的用法详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。


# c语言  # 实现变长数组  # C语言结构体(struct)的详细讲解  # C语言之结构体(struct)详解  # C语言结构体(struct)常见使用方法(细节问题)  # C语言中结构体(struct)的几种初始化方法  # C语言 结构体(Struct)详解及示例代码  # C语言中结构体struct编写的一些要点解析  # C语言 struct结构体超详细讲解  # 变长  # 给大家  # 是一个  # 我在  # 希望能  # 可以使用  # 不为  # 很清楚  # 这篇  # 过我  # 小编  # 大家多多  # 就可以  # 后经  # 出现了  # 但该  # 忘记了  # 在实际  # 网上  # 数组名 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?  如何用好域名打造高点击率的自主建站?  如何打造高效商业网站?建站目的决定转化率  如何基于云服务器快速搭建个人网站?  高防服务器租用首荐平台,企业级优惠套餐快速部署  Laravel中DTO是什么概念_在Laravel项目中使用数据传输对象(DTO)  网站制作壁纸教程视频,电脑壁纸网站?  PHP怎么接收前端传的文件路径_处理文件路径参数接收方法【汇总】  百度浏览器如何管理插件 百度浏览器插件管理方法  如何快速查询域名建站关键信息?  LinuxCD持续部署教程_自动发布与回滚机制  Laravel怎么定时执行任务_Laravel任务调度器Schedule配置与Cron设置【教程】  phpredis提高消息队列的实时性方法(推荐)  Laravel如何编写单元测试和功能测试?(PHPUnit示例)  高端企业智能建站程序:SEO优化与响应式模板定制开发  高防服务器如何保障网站安全无虞?  Laravel如何创建自定义中间件?(Middleware代码示例)  Laravel如何实现API版本控制_Laravel版本化API设计方案  香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化  php打包exe后无法访问网络共享_共享权限设置方法【教程】  Laravel PHP版本要求一览_Laravel各版本环境要求对照  浅谈redis在项目中的应用  详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)  Laravel Docker环境搭建教程_Laravel Sail使用指南  桂林网站制作公司有哪些,桂林马拉松怎么报名?  如何为不同团队 ID 动态生成多个非值班状态按钮  Laravel怎么实现模型属性转换Casting_Laravel自动将JSON字段转为数组【技巧】  网站图片在线制作软件,怎么在图片上做链接?  车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?  Laravel如何安装Breeze扩展包_Laravel用户注册登录功能快速实现【流程】  Laravel与Inertia.js怎么结合_使用Laravel和Inertia构建现代单页应用  如何用AWS免费套餐快速搭建高效网站?  如何用y主机助手快速搭建网站?  Bootstrap整体框架之CSS12栅格系统  北京网页设计制作网站有哪些,继续教育自动播放怎么设置?  如何自定义建站之星模板颜色并下载新样式?  夸克浏览器网页跳转延迟怎么办 夸克浏览器跳转优化  Windows10怎样连接蓝牙设备_Windows10蓝牙连接步骤【教程】  Laravel怎么设置路由分组Prefix_Laravel多级路由嵌套与命名空间隔离【步骤】  java获取注册ip实例  在Oracle关闭情况下如何修改spfile的参数  Laravel怎么为数据库表字段添加索引以优化查询  如何在云主机上快速搭建网站?  Win11怎样安装网易有道词典_Win11安装词典教程【步骤】  怎样使用JSON进行数据交换_它有什么限制  高防服务器:AI智能防御DDoS攻击与数据安全保障  Laravel如何处理JSON字段_Eloquent原生JSON字段类型操作教程  手机怎么制作网站教程步骤,手机怎么做自己的网页链接?  网站制作报价单模板图片,小松挖机官方网站报价?  logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?