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?

