char data[0]在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
原文链接:http://www.2cto.com/kf/201312/261179.html
PS:必须将指针定义在struct的末尾,指针的类型也可以不为char。
总结:
柔性数组
它只能放在结构体末尾,
是申明一个长度为0的数组(eg.char data[0] ;
或int data[0];
都行)
可以使得这个结构体是可变长的。
转载于:https://www.cnblogs.com/yangchang1117/p/8984170.html
char data[0]在struct末尾的用法相关推荐
- C语言变长数组 struct中char data[0]的用法
摘要:在实际的编程中,我们经常需要使用变长数组,但是C语言并不支持变长的数组.此时,我们可以使用结构体的方法实现C语言变长数组. struct MyData { int nLen; char d ...
- char data[0]用法总结
struct MyData { int nLen; char data[0]; }; 开始没有理解红色部分的内容,上网搜索下,发现用处很大,记录下来. ...
- C语言变长数组data[0]【总结】
C语言变长数组data[0][总结] 1.前言 今天在看代码中遇到一个结构中包含char data[0],第一次见到时感觉很奇怪,数组的长度怎么可以为零呢?于是上网搜索一下这样的用法的目的,发现在li ...
- char s[0] do{}while(0)
为什么80%的码农都做不了架构师?>>> http://www.newsmth.net mark: struct line { int len; char s[0]; }; s ...
- char*data和char data[]
char*data和char data[] char*data和char data[]的区别要注意: char*data指向字符常量区,其中字符不可修改! char data[]指向栈区,其中字符可以 ...
- python中struct.unpack的用法
python中struct.unpack的用法 4/25/2009 12:18:21 PM Python中按一定的格式取出某字符串中的子字符串,使用struck.unpack是非常高效的. 1. 设置 ...
- RC-u4 攻略分队【dfs + struct配合cmp用法】
题目 RC-u4 攻略分队 副本是游戏里的一个特色玩法,主要为玩家带来装备.道具.游戏资源的产出,满足玩家的游戏进程. 在 MMORPG<最终幻想14>里,有一个攻略人数最大达到 56 人 ...
- mysql nvarchar用什么代替_mysql中char、varchar、nvarchar数据类型的用法区别
mysql中char.varchar.nvarchar数据类型的用法区别 mysql中char.varchar.nvarchar数据类型的用法区别: 说明: 1.char: 固定长度的非 Unicod ...
- Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for i
keras imshow显示图片显示不出来,报错 Clipping input data to the valid range for imshow with RGB data ([0..1] fo ...
最新文章
- Mantis 缺陷管理系统配置与安装
- /proc/diskstats各字段解析
- 使用pyjnius和mpxj来读取mpp文件
- 有感于任正非老爷子的发言
- what do eco consulting do
- Android--近来学习总结(2017/3/27)
- 搞懂正则表达式之基础篇
- BZOJ-3110-K大数查询-ZJOI2013-暴力
- Android第十四期 - 可扩展选项卡
- iQOO Neo5活力版或本月发布:搭载骁龙870+高刷LCD屏
- 操作系统学习笔记:文件管理
- 进程间通信之CreatePipe
- python pandas 日期计算_pandas dataframe 日期间隔天数计算问题
- C# CultureInfo 和CultureUIInfo的区别.
- XX市智慧环卫管理系统解决方案V1.0
- 博客网站的选择兼开博通文
- 有什么好玩又能学到知识的编程游戏?
- mor命令_MOR游戏的情况。
- 【转贴】linux操作系统下c语言编程入门
- MatLab画直方图并填充纹理
热门文章
- 全国计算机等级考试题库二级C操作题100套(第31套)
- circle函数用法 turtle_Python绘图库Turtle详细分析
- 雷鸟html签名设置,thunderbird 使用OpenPGP加解密邮件
- java编写日期_Java常用日期操作
- java bean工厂_从零构建轻量级Java Web框架
- Spring事务传播属性和隔离级别
- python字符串函数运算_Python入门教程2. 字符串基本操作【运算、格式化输出、常用函数】 原创...
- mysql下一个版本号_mysql下一个版本应该且实现并不复杂增加的常用功能
- 100个Web开发资源(收藏)
- 【TensorFlow篇】--Tensorflow框架实现SoftMax模型识别手写数字集