在实际的编程中,我们经常需要使用变长数组,但是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末尾的用法相关推荐

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

    摘要:在实际的编程中,我们经常需要使用变长数组,但是C语言并不支持变长的数组.此时,我们可以使用结构体的方法实现C语言变长数组. struct MyData  {  int nLen;  char d ...

  2. char data[0]用法总结

    struct MyData {     int nLen;     char data[0]; };         开始没有理解红色部分的内容,上网搜索下,发现用处很大,记录下来.          ...

  3. C语言变长数组data[0]【总结】

    C语言变长数组data[0][总结] 1.前言 今天在看代码中遇到一个结构中包含char data[0],第一次见到时感觉很奇怪,数组的长度怎么可以为零呢?于是上网搜索一下这样的用法的目的,发现在li ...

  4. char s[0] do{}while(0)

    为什么80%的码农都做不了架构师?>>>    http://www.newsmth.net mark: struct line { int len; char s[0]; }; s ...

  5. char*data和char data[]

    char*data和char data[] char*data和char data[]的区别要注意: char*data指向字符常量区,其中字符不可修改! char data[]指向栈区,其中字符可以 ...

  6. python中struct.unpack的用法

    python中struct.unpack的用法 4/25/2009 12:18:21 PM Python中按一定的格式取出某字符串中的子字符串,使用struck.unpack是非常高效的. 1. 设置 ...

  7. RC-u4 攻略分队【dfs + struct配合cmp用法】

    题目 RC-u4 攻略分队 副本是游戏里的一个特色玩法,主要为玩家带来装备.道具.游戏资源的产出,满足玩家的游戏进程. 在 MMORPG<最终幻想14>里,有一个攻略人数最大达到 56 人 ...

  8. mysql nvarchar用什么代替_mysql中char、varchar、nvarchar数据类型的用法区别

    mysql中char.varchar.nvarchar数据类型的用法区别 mysql中char.varchar.nvarchar数据类型的用法区别: 说明: 1.char: 固定长度的非 Unicod ...

  9. 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 ...

最新文章

  1. Mantis 缺陷管理系统配置与安装
  2. /proc/diskstats各字段解析
  3. 使用pyjnius和mpxj来读取mpp文件
  4. 有感于任正非老爷子的发言
  5. what do eco consulting do
  6. Android--近来学习总结(2017/3/27)
  7. 搞懂正则表达式之基础篇
  8. BZOJ-3110-K大数查询-ZJOI2013-暴力
  9. Android第十四期 - 可扩展选项卡
  10. iQOO Neo5活力版或本月发布:搭载骁龙870+高刷LCD屏
  11. 操作系统学习笔记:文件管理
  12. 进程间通信之CreatePipe
  13. python pandas 日期计算_pandas dataframe 日期间隔天数计算问题
  14. C# CultureInfo 和CultureUIInfo的区别.
  15. XX市智慧环卫管理系统解决方案V1.0
  16. 博客网站的选择兼开博通文
  17. 有什么好玩又能学到知识的编程游戏?
  18. mor命令_MOR游戏的情况。
  19. 【转贴】linux操作系统下c语言编程入门
  20. MatLab画直方图并填充纹理

热门文章

  1. 全国计算机等级考试题库二级C操作题100套(第31套)
  2. circle函数用法 turtle_Python绘图库Turtle详细分析
  3. 雷鸟html签名设置,thunderbird 使用OpenPGP加解密邮件
  4. java编写日期_Java常用日期操作
  5. java bean工厂_从零构建轻量级Java Web框架
  6. Spring事务传播属性和隔离级别
  7. python字符串函数运算_Python入门教程2. 字符串基本操作【运算、格式化输出、常用函数】 原创...
  8. mysql下一个版本号_mysql下一个版本应该且实现并不复杂增加的常用功能
  9. 100个Web开发资源(收藏)
  10. 【TensorFlow篇】--Tensorflow框架实现SoftMax模型识别手写数字集